这个标准用来替代原先的DES(Data Encryption Standard),已经被多方分析且广为全世界所使用。经过五年的甄选流程,高级加密标准由美国国家标准与技术研究院 (NIST)于2001年11月26日发布于FIPS PUB 197,并在2002年5月26日成为有效的标准。2006年,高级加密标准已然成为对称密钥加密中最流行的算法之一。
该算法为比利时密码学家Joan Daemen和Vincent Rijmen所设计,结合两位作者的名字,以Rijdael之名命之,投稿高级加密标准的甄选流程。(Rijdael的发音近于 "Rhine doll"。)
上图来自百度百科
public class AESUtils { private const string key = "XXXWebapi_key"; #region AES加密解密 /// <summary> /// 128位处理key /// </summary> /// <param name="keyArray">原字节</param> /// <param name="key">处理key</param> /// <returns></returns> private static byte[] GetAesKey(byte[] keyArray, string key=key) { byte[] newArray = new byte[16]; if (keyArray.Length < 16) { for (int i = 0; i < newArray.Length; i++) { if (i >= keyArray.Length) { newArray[i] = 0; } else { newArray[i] = keyArray[i]; } } } return newArray; } /// <summary> /// 使用AES加密字符串,按128位处理key /// </summary> /// <param name="content">加密内容</param> /// <param name="key">秘钥,需要128位、256位.....</param> /// <returns>Base64字符串结果</returns> public static string AesEncrypt(string content, string key=key, bool autoHandle = true) { byte[] keyArray = Encoding.UTF8.GetBytes(key); if (autoHandle) { keyArray = GetAesKey(keyArray, key); } byte[] toEncryptArray = Encoding.UTF8.GetBytes(content); SymmetricAlgorithm des = Aes.Create(); des.Key = keyArray; des.Mode = CipherMode.ECB; des.Padding = PaddingMode.PKCS7; ICryptoTransform cTransform = des.CreateEncryptor(); byte[] resultArray = cTransform.TransformFinalBlock(toEncryptArray, 0, toEncryptArray.Length); return Convert.ToBase64String(resultArray); } /// <summary> /// 使用AES解密字符串,按128位处理key /// </summary> /// <param name="content">内容</param> /// <param name="key">秘钥,需要128位、256位.....</param> /// <returns>UTF8解密结果</returns> public static string AesDecrypt(string content, string key=key, bool autoHandle = true) { byte[] keyArray = Encoding.UTF8.GetBytes(key); if (autoHandle) { keyArray = GetAesKey(keyArray, key); } byte[] toEncryptArray = Convert.FromBase64String(content); SymmetricAlgorithm des = Aes.Create(); des.Key = keyArray; des.Mode = CipherMode.ECB; des.Padding = PaddingMode.PKCS7; ICryptoTransform cTransform = des.CreateDecryptor(); byte[] resultArray = cTransform.TransformFinalBlock(toEncryptArray, 0, toEncryptArray.Length); return Encoding.UTF8.GetString(resultArray); } #endregion }