• 技术文章 >后端开发 >C#.Net教程

    Asp.net,C# 加密解密字符串

    巴扎黑巴扎黑2016-12-20 16:01:41原创945
    首先在web.config | app.config 文件下增加如下代码:
    <?xml version="1.0"?>
    <configuration>
    <appSettings>
    <add key="IV" value="SuFjcEmp/TE="/>
    <add key="Key" value="KIPSToILGp6fl+3gXJvMsN4IajizYBBT"/>
    </appSettings>
    </configuration>



    IV:加密算法的初始向量。

    Key:加密算法的密钥。



    接着新建类CryptoHelper,作为加密帮助类。

    首先要从配置文件中得到IV 和Key。所以基本代码如下:
    public class CryptoHelper
    {
    //private readonly string IV = "SuFjcEmp/TE=";
    private readonly string IV = string.Empty;
    //private readonly string Key = "KIPSToILGp6fl+3gXJvMsN4IajizYBBT";
    private readonly string Key = string.Empty;

    /// <summary>
    ///构造函数
    /// </summary>
    public CryptoHelper()
    {
    IV = ConfigurationManager.AppSettings["IV"];
    Key = ConfigurationManager.AppSettings["Key"];
    }
    }





    注意添加System.Configuration.dll程序集引用。



    在获得了IV 和Key 之后,需要获取提供加密服务的Service 类。

    在这里,使用的是System.Security.Cryptography; 命名空间下的TripleDESCryptoServiceProvider类。

    获取TripleDESCryptoServiceProvider 的方法如下:
    /// <summary>
    /// 获取加密服务类
    /// </summary>
    /// <returns></returns>
    private TripleDESCryptoServiceProvider GetCryptoProvider()
    {
    TripleDESCryptoServiceProvider provider = new TripleDESCryptoServiceProvider();

    provider.IV = Convert.FromBase64String(IV);
    provider.Key = Convert.FromBase64String(Key);

    return provider;
    }



    TripleDESCryptoServiceProvider 两个有用的方法

    CreateEncryptor:创建对称加密器对象ICryptoTransform.

    CreateDecryptor:创建对称解密器对象ICryptoTransform

    加密器对象和解密器对象可以被CryptoStream对象使用。来对流进行加密和解密。

    cryptoStream 的构造函数如下:
    public CryptoStream(Stream stream, ICryptoTransform transform, CryptoStreamMode mode);

    使用transform 对象对stream 进行转换。



    完整的加密字符串代码如下:
    /// <summary>
    /// 获取加密后的字符串
    /// </summary>
    /// <param name="inputValue">输入值.</param>
    /// <returns></returns>
    public string GetEncryptedValue(string inputValue)
    {
    TripleDESCryptoServiceProvider provider = this.GetCryptoProvider();

    // 创建内存流来保存加密后的流
    MemoryStream mStream = new MemoryStream();

    // 创建加密转换流
    CryptoStream cStream = new CryptoStream(mStream,
    provider.CreateEncryptor(), CryptoStreamMode.Write);

    // 使用UTF8编码获取输入字符串的字节。
    byte[] toEncrypt = new UTF8Encoding().GetBytes(inputValue);

    // 将字节写到转换流里面去。
    cStream.Write(toEncrypt, 0, toEncrypt.Length);
    cStream.FlushFinalBlock();

    // 在调用转换流的FlushFinalBlock方法后,内部就会进行转换了,此时mStream就是加密后的流了。
    byte[] ret = mStream.ToArray();

    // Close the streams.
    cStream.Close();
    mStream.Close();

    //将加密后的字节进行64编码。
    return Convert.ToBase64String(ret);
    }





    解密方法也类似:
    /// <summary>
    /// 获取解密后的值
    /// </summary>
    /// <param name="inputValue">经过加密后的字符串.</param>
    /// <returns></returns>
    public string GetDecryptedValue(string inputValue)
    {
    TripleDESCryptoServiceProvider provider = this.GetCryptoProvider();

    byte[] inputEquivalent = Convert.FromBase64String(inputValue);

    // 创建内存流保存解密后的数据
    MemoryStream msDecrypt = new MemoryStream();

    // 创建转换流。
    CryptoStream csDecrypt = new CryptoStream(msDecrypt,
    provider.CreateDecryptor(),
    CryptoStreamMode.Write);

    csDecrypt.Write(inputEquivalent, 0, inputEquivalent.Length);

    csDecrypt.FlushFinalBlock();
    csDecrypt.Close();

    //获取字符串。
    return new UTF8Encoding().GetString(msDecrypt.ToArray());
    }





    完整的CryptoHelper代码如下:
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Security.Cryptography;
    using System.IO;
    using System.Configuration;

    namespace WindowsFormsApplication1
    {
    public class CryptoHelper
    {
    //private readonly string IV = "SuFjcEmp/TE=";
    private readonly string IV = string.Empty;
    //private readonly string Key = "KIPSToILGp6fl+3gXJvMsN4IajizYBBT";
    private readonly string Key = string.Empty;

    public CryptoHelper()
    {
    IV = ConfigurationManager.AppSettings["IV"];
    Key = ConfigurationManager.AppSettings["Key"];
    }

    /// <summary>
    /// 获取加密后的字符串
    /// </summary>
    /// <param name="inputValue">输入值.</param>
    /// <returns></returns>
    public string GetEncryptedValue(string inputValue)
    {
    TripleDESCryptoServiceProvider provider = this.GetCryptoProvider();

    // 创建内存流来保存加密后的流
    MemoryStream mStream = new MemoryStream();

    // 创建加密转换流
    CryptoStream cStream = new CryptoStream(mStream,

    provider.CreateEncryptor(), CryptoStreamMode.Write);
    // 使用UTF8编码获取输入字符串的字节。
    byte[] toEncrypt = new UTF8Encoding().GetBytes(inputValue);

    // 将字节写到转换流里面去。
    cStream.Write(toEncrypt, 0, toEncrypt.Length);
    cStream.FlushFinalBlock();

    // 在调用转换流的FlushFinalBlock方法后,内部就会进行转换了,此时mStream就是加密后的流了。
    byte[] ret = mStream.ToArray();

    // Close the streams.
    cStream.Close();
    mStream.Close();

    //将加密后的字节进行64编码。
    return Convert.ToBase64String(ret);
    }

    /// <summary>
    /// 获取加密服务类
    /// </summary>
    /// <returns></returns>
    private TripleDESCryptoServiceProvider GetCryptoProvider()
    {
    TripleDESCryptoServiceProvider provider = new TripleDESCryptoServiceProvider();

    provider.IV = Convert.FromBase64String(IV);
    provider.Key = Convert.FromBase64String(Key);

    return provider;

    }

    /// <summary>
    /// 获取解密后的值
    /// </summary>
    /// <param name="inputValue">经过加密后的字符串.</param>
    /// <returns></returns>
    public string GetDecryptedValue(string inputValue)
    {
    TripleDESCryptoServiceProvider provider = this.GetCryptoProvider();
    byte[] inputEquivalent = Convert.FromBase64String(inputValue);

    // 创建内存流保存解密后的数据
    MemoryStream msDecrypt = new MemoryStream();

    // 创建转换流。
    CryptoStream csDecrypt = new CryptoStream(msDecrypt,
    provider.CreateDecryptor(),
    CryptoStreamMode.Write);

    csDecrypt.Write(inputEquivalent, 0, inputEquivalent.Length);
    csDecrypt.FlushFinalBlock();

    csDecrypt.Close();

    //获取字符串。
    return new UTF8Encoding().GetString(msDecrypt.ToArray());
    }
    }
    }

    php入门到就业线上直播课:查看学习

    声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。

    前端(VUE)零基础到就业课程:点击学习

    清晰的学习路线+老师随时辅导答疑

    自己动手写 PHP MVC 框架:点击学习

    快速了解MVC架构、了解框架底层运行原理

    上一篇:关于URL后面传中文方法总结 下一篇:自己动手写 PHP MVC 框架(40节精讲/巨细/新人进阶必看)

    相关文章推荐

    • ❤️‍🔥共22门课程,总价3725元,会员免费学• ❤️‍🔥接口自动化测试不想写代码?• c语言本身有没有输入输出语句• c语言中源文件编译后生成什么文件• c语言中的标识符是由什么组成• c语言中关键字有多少个• c语言中case是什么意思
    1/1

    PHP中文网