.NET Framework 提供许多标准加密算法的实现。 相关类可在命名空间:System.Security.Cryptography
中找到。详细请参考MSDN。要使用对称加密解密,需要一个RijndaelManaged类的实例。
写了一个SHA加密解密的模块,以下是事例代码:
加密解密数据
#region 加密解密数据
//创建RijndaelManaged 实例
private static RijndaelManaged _createRijndaelManaged(string password)
...{
RijndaelManaged rjdM = new RijndaelManaged();
PasswordDeriveBytes deriver = new PasswordDeriveBytes(UnicodeEncoding.UTF8.GetBytes(password), null);
byte[] ivZeros = new byte[8];
byte[] pbeKey = deriver.CryptDeriveKey("TripleDES", "SHA1", 192, ivZeros);
rjdM.Key = pbeKey;
rjdM.IV = new byte[] ...{ 159, 178, 198, 14, 163, 152, 193, 44, 70, 121, 203, 225, 141, 65, 131, 86 };
return rjdM;
}
//加密数据
public static byte[] Encrypt(string password, byte[] toEncrypt)
...{
RijndaelManaged rjdM = _createRijndaelManaged(password);
ICryptoTransform encryptor = rjdM.CreateEncryptor(rjdM.Key, rjdM.IV);
MemoryStream msEncrypt = new MemoryStream();
CryptoStream csEncrypt = new CryptoStream(msEncrypt, encryptor, CryptoStreamMode.Write);
csEncrypt.Write(toEncrypt, 0, toEncrypt.Length);
csEncrypt.FlushFinalBlock();
return msEncrypt.ToArray();
}
//解密数据
public static byte[] Decrypt(string password, byte[] encrypted)
...{
RijndaelManaged rjdM = _createRijndaelManaged(password);
ICryptoTransform decryptor = rjdM.CreateDecryptor(rjdM.Key, rjdM.IV);
MemoryStream msDecrypt = new MemoryStream(encrypted);
CryptoStream csDecrypt = new CryptoStream(msDecrypt, decryptor, CryptoStreamMode.Read);
byte[] fromEncrypt = new byte[encrypted.Length];
csDecrypt.Read(fromEncrypt, 0, fromEncrypt.Length);
return fromEncrypt;
}
#endregion
//创建RijndaelManaged 实例
private static RijndaelManaged _createRijndaelManaged(string password)
...{
RijndaelManaged rjdM = new RijndaelManaged();
PasswordDeriveBytes deriver = new PasswordDeriveBytes(UnicodeEncoding.UTF8.GetBytes(password), null);
byte[] ivZeros = new byte[8];
byte[] pbeKey = deriver.CryptDeriveKey("TripleDES", "SHA1", 192, ivZeros);
rjdM.Key = pbeKey;
rjdM.IV = new byte[] ...{ 159, 178, 198, 14, 163, 152, 193, 44, 70, 121, 203, 225, 141, 65, 131, 86 };
return rjdM;
}
//加密数据
public static byte[] Encrypt(string password, byte[] toEncrypt)
...{
RijndaelManaged rjdM = _createRijndaelManaged(password);
ICryptoTransform encryptor = rjdM.CreateEncryptor(rjdM.Key, rjdM.IV);
MemoryStream msEncrypt = new MemoryStream();
CryptoStream csEncrypt = new CryptoStream(msEncrypt, encryptor, CryptoStreamMode.Write);
csEncrypt.Write(toEncrypt, 0, toEncrypt.Length);
csEncrypt.FlushFinalBlock();
return msEncrypt.ToArray();
}
//解密数据
public static byte[] Decrypt(string password, byte[] encrypted)
...{
RijndaelManaged rjdM = _createRijndaelManaged(password);
ICryptoTransform decryptor = rjdM.CreateDecryptor(rjdM.Key, rjdM.IV);
MemoryStream msDecrypt = new MemoryStream(encrypted);
CryptoStream csDecrypt = new CryptoStream(msDecrypt, decryptor, CryptoStreamMode.Read);
byte[] fromEncrypt = new byte[encrypted.Length];
csDecrypt.Read(fromEncrypt, 0, fromEncrypt.Length);
return fromEncrypt;
}
#endregion