首先在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()); } } } 使用例子:
(责任编辑:admin) |