/// <summary>
/// 加密
/// </summary>
public static class Encrypting
{
#region 使用对称加密、解密
private static string GetEncryptKey()
{
return ConfigurationManager.AppSettings["EncryptKey"];
}
/// <summary>
/// 使用对称算法加密
/// </summary>
/// <param name="str"></param>
/// <param name="encryptKey"></param>
/// <returns></returns>
public static string SymmetricEncrypts(string str)
{
string result = string.Empty;
byte[] inputData = System.Text.Encoding.UTF8.GetBytes(str);
SymmetricAlgorithm Algorithm = null;
MemoryStream msTarget = null;
CryptoStream encStream = null;
try
{
byte[] kv = { 0x12, 0x34, 0x56, 0x78, 0x90, 0xAB, 0xCD, 0xEF, 0x12, 0x34, 0x56, 0x78, 0x90, 0xAB, 0xCD, 0xEF };
//如需指定加密算法,可在Create()参数中指定字符串
//Create()方法中的参数可以是:DES、RC2 System、Rijndael、TripleDES
//采用不同的实现类对IV向量的要求不一样(可以用GenerateIV()方法生成),无参数表示用Rijndael
Algorithm = SymmetricAlgorithm.Create();//产生一种加密算法
msTarget = new MemoryStream();
//定义将数据流链接到加密转换的流。
encStream = new CryptoStream(msTarget, Algorithm.CreateEncryptor(Convert.FromBase64String(GetEncryptKey()), kv), CryptoStreamMode.Write);
encStream.Write(inputData, 0, inputData.Length);
encStream.FlushFinalBlock();
result = Convert.ToBase64String(msTarget.ToArray());
}
catch (Exception)
{
return null;
}
finally
{
if (Algorithm != null) Algorithm.Clear();
if (msTarget != null) msTarget.Close();
if (encStream != null) encStream.Close();
}
return result;
}
/// <summary>
/// 使用对称算法解密
/// </summary>
/// <param name="encryptStr"></param>
/// <param name="encryptKey"></param>
/// <returns></returns>
public static string SymmectricDecrypts(string encryptStr)
{
string result = string.Empty;
SymmetricAlgorithm Algorithm = null;
MemoryStream msTarget = null;
CryptoStream decStream = null;
//加密时使用的是Convert.ToBase64String(),解密时必须使用Convert.FromBase64String()
try
{
byte[] kv = { 0x12, 0x34, 0x56, 0x78, 0x90, 0xAB, 0xCD, 0xEF, 0x12, 0x34, 0x56, 0x78, 0x90, 0xAB, 0xCD, 0xEF };
byte[] encryptData = Convert.FromBase64String(encryptStr);
Algorithm = SymmetricAlgorithm.Create();
msTarget = new MemoryStream();
decStream = new CryptoStream(msTarget, Algorithm.CreateDecryptor(Convert.FromBase64String(GetEncryptKey()), kv), CryptoStreamMode.Write);
decStream.Write(encryptData, 0, encryptData.Length);
decStream.FlushFinalBlock();
result = System.Text.Encoding.Default.GetString(msTarget.ToArray());
}
catch (Exception)
{
return null;
}
finally
{
if (Algorithm != null) Algorithm.Clear();
if (msTarget != null) msTarget.Close();
if (decStream != null) decStream.Close();
}
return result;
}
#endregion
}