/// <summary>
/// DES加密
/// </summary>
/// <param name="toEncrypt">被加密的字符串</param>
/// <returns>加密后字符串</returns>
public string DESEncrypt(string toEncrypt)
{
//定义DES加密服务提供类
DESCryptoServiceProvider des = new DESCryptoServiceProvider();
//加密字符串转换为byte数组
byte[] inputByte = ASCIIEncoding.ASCII.GetBytes(toEncrypt);
//加密密匙转化为byte数组
byte[] key = Convert.FromBase64String(DESKey);
des.Key = key;
des.IV = key;
//创建其支持存储区为内存的流
MemoryStream ms = new MemoryStream();
//定义将数据流链接到加密转换的流
CryptoStream cs = new CryptoStream(ms, des.CreateEncryptor(), CryptoStreamMode.Write);
cs.Write(inputByte, 0, inputByte.Length);
cs.FlushFinalBlock();
StringBuilder ret = new StringBuilder();
foreach (byte b in ms.ToArray())
{
//向可变字符串追加转换成十六进制数字符串的加密后byte数组。
ret.AppendFormat("{0:X2}", b);
}
return ret.ToString();
}
/// <summary>
/// DES解密
/// </summary>
/// <param name="toDecrypt">被解密的加密字符串</param>
/// <returns>解密后字符串</returns>
public string DESDecrypt(string toDecrypt)
{
//定义DES加密解密服务提供类
DESCryptoServiceProvider des = new DESCryptoServiceProvider();
//加密密匙转化为byte数组
byte[] key = Convert.FromBase64String(DESKey);
des.Key = key;
des.IV = key;
//将被解密的字符串每两个字符以十六进制解析为byte类型,组成byte数组
int length = (toDecrypt.Length / 2);
byte[] inputByte = new byte[length];
for (int index = 0; index < length; index++)
{
string substring = toDecrypt.Substring(index * 2, 2);
inputByte[index] = Convert.ToByte(substring, 16);
}
//创建其支持存储区为内存的流
MemoryStream ms = new MemoryStream();
//定义将数据流链接到加密转换的流
CryptoStream cs = new CryptoStream(ms, des.CreateDecryptor(), CryptoStreamMode.Write);
cs.Write(inputByte, 0, inputByte.Length);
cs.FlushFinalBlock();
return ASCIIEncoding.ASCII.GetString((ms.ToArray()));
}
|