5.1 原理简述
AES(高级加密算法,Advanced Encryption Standard),美国政府提出,该加密算法采用对称分组密码体制,提供128位、192位和256位三种密钥长度,算法应易于各种硬件和软件实现。这种加密算法是美国联邦政府采用的区块加密标准。AES本身就是为了取代DES的,AES具有更好的安全性、效率和灵活性。.
5.2 C#代码
// AES(高级加密算法,Advanced Encryption Standard),美政府提出
public sealed class AES
{
/// <summary>
/// AES加密
/// </summary>
/// <param name="plaintext">明文</param>
/// <param name="key">密钥,长度16byte</param>
/// <param name="IV">初始化向量,长度16byte</param>
/// <returns>返回密文</returns>
public static string AESEncrypt(string plaintext, string key, string iv)
{
if (plaintext == "") return "";
try
{
byte[] btKey = Encoding.UTF8.GetBytes(key);
byte[] btIV = Encoding.UTF8.GetBytes(iv);
byte[] inputByteArray = Encoding.UTF8.GetBytes(plaintext);
using (AesCryptoServiceProvider provider = new AesCryptoServiceProvider())
{
using (MemoryStream mStream = new MemoryStream())
{
CryptoStream cStream = new CryptoStream(mStream, provider.CreateEncryptor(btKey, btIV), CryptoStreamMode.Write);
cStream.Write(inputByteArray, 0, inputByteArray.Length);
cStream.FlushFinalBlock();
cStream.Close();
return Convert.ToBase64String(mStream.ToArray());
}
}
}
catch { }
return "AES加密出错";
}
/// <summary>
/// AES解密
/// </summary>
/// <param name="ciphertext">密文</param>
/// <param name="key">密钥,长度16byte</param>
/// <param name="iv">初始化向量,长度16byte</param>
/// <returns>返回明文</returns>
public static string AESDecrypt(string ciphertext, string key, string iv)
{
if (ciphertext == "") return "";
try
{
byte[] btKey = Encoding.UTF8.GetBytes(key);
byte[] btIV = Encoding.UTF8.GetBytes(iv);
byte[] inputByteArray = Convert.FromBase64String(ciphertext);
using (AesCryptoServiceProvider provider = new AesCryptoServiceProvider())
{
using (MemoryStream mStream = new MemoryStream())
{
CryptoStream cStream = new CryptoStream(mStream, provider.CreateDecryptor(btKey, btIV), CryptoStreamMode.Write);
cStream.Write(inputByteArray, 0, inputByteArray.Length);
cStream.FlushFinalBlock();
cStream.Close();
return Encoding.UTF8.GetString(mStream.ToArray());
}
}
}
catch { }
return "AES解密出错";
}
}