public static string AesEncrypt(string str, string key)
{
if (string.IsNullOrEmpty(str)) return null;
Byte[] toEncryptArray = Encoding.UTF8.GetBytes(str);
RijndaelManaged rm = new RijndaelManaged();
rm.Key = Encoding.UTF8.GetBytes(key);
rm.Mode = CipherMode.ECB; // 运算方式
rm.Padding = PaddingMode.PKCS7; // 填充方式
rm.BlockSize = 128; // 加密结果大小(128 - 默认、192、256)
try
{
ICryptoTransform cTransform = rm.CreateEncryptor();
Byte[] resultArray = cTransform.TransformFinalBlock(toEncryptArray, 0, toEncryptArray.Length);
return Convert.ToBase64String(resultArray, 0, resultArray.Length);
}
catch(Exception e)
{
Console.WriteLine("AesEncrypt exp : " + e.Message);
return "";
}
}
public static string AesDecrypt(string str, string key)
{
if (string.IsNullOrEmpty(str)) return null;
Byte[] toEncryptArray = Convert.FromBase64String(str);
RijndaelManaged rm = new RijndaelManaged();
rm.Key = Encoding.UTF8.GetBytes(key);
rm.Mode = CipherMode.ECB; // 运算方式
rm.Padding = PaddingMode.PKCS7; // 填充方式
rm.BlockSize = 128; // 加密结果大小(128 - 默认、192、256)
try
{
ICryptoTransform cTransform = rm.CreateDecryptor();
Byte[] resultArray = cTransform.TransformFinalBlock(toEncryptArray, 0, toEncryptArray.Length);
return Encoding.UTF8.GetString(resultArray);
}
catch(Exception e)
{
Console.WriteLine("AesDecrypt exp : " + e.Message);
return "";
}
}
其中,key 的大小只能是 128位、192位、256位,对应的字符长度为 16、24、32
如果要返回 hex 形式,加密需要用以下方式取代 , 解密时不需要做 base64 解码:
return BitConverter.ToString(resultArray, 0).Replace("-", string.Empty).ToLower();