最近写了另一个AES加密封装的接口,因为之前一直没用过,所以写了好一会才研究出来。
封装源代码如下:
/// <summary>
/// AES加密
/// </summary>
/// <param name="str">需要加密的字符串</param>
/// <param name="key">32位密钥</param>
///<param name="lv">向量(默认偏移量)</param>
/// <returns>加密后的字符串</returns>
public static string Encrypt(string str, string key,string lv)
{
try
{
Byte[] keyArray = System.Text.Encoding.UTF8.GetBytes(key);
Byte[] toEncryptArray = System.Text.Encoding.UTF8.GetBytes(str);
var rijndael = new System.Security.Cryptography.RijndaelManaged();
rijndael.Key = keyArray;
rijndael.Mode = System.Security.Cryptography.CipherMode.CBC;
rijndael.Padding = System.Security.Cryptography.PaddingMode.PKCS7;
rijndael.IV = System.Text.Encoding.UTF8.GetBytes(Iv);
System.Security.Cryptography.ICryptoTransform cTransform = rijndael.CreateEncryptor();
Byte[] resultArray = cTransform.TransformFinalBlock(toEncryptArray, 0, toEncryptArray.Length);
return Convert.ToBase64String(resultArray, 0, resultArray.Length);
}
catch (Exception ex)
{
Logger<ZhiTengDaK9LogAll>.Error("调用AES加密方法异常,异常原因:" + ex.Message);
return "";
}
}
需要注意的几点:
第一:AES的加密模式,有ECB,CBC,CTR,OFB,CFB等方式,如图:
不要搞错了,这一段代码:
rijndael.Mode = System.Security.Cryptography.CipherMode.CBC;
其次是填充方式,有packs5padding,packs7padding等填充方式,可以根据实际情况选择,如下图:
这一段:
rijndael.Padding = System.Security.Cryptography.PaddingMode.PKCS7;
偏移量以及字符集:
rijndael.IV = System.Text.Encoding.UTF8.GetBytes(Iv);
最后,调用:
Encrypt(str, ZhiTengDaK9LogAll.DWSErrorSign(),lv);