一、AES说明
高级加密标准(英语:Advanced Encryption Standard,缩写:AES),在密码学中又称Rijndael加密法,是美国联邦政府采用的一种区块加密标准。这个标准用来替代原先的DES,已经被多方分析且广为全世界所使用。它要求区块大小必须为128位,而密钥长度则可以为128、196、256位。
注:AES中秘钥的长度不正确(不为128位等),则抛出异常。
在.NET Core中对于对称加密统一接口不再利用不同类而实现,对于非对称加密当然和对称加密接口就不同了,创建起来格外方便,不再是实例化对应的类,
//对称加密 var aes = Aes.Create(); var tripleDES = TripleDES.Create(); //非对称加密 var rsa = RSA.Create();
二、加密代码整理
#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) { 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, 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, 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
使用示例:
string key = "123"; string result1 = SecurityHelper.AesEncrypt("张三丰", key); Console.WriteLine(result1); //o7TgaEbkrWOzUMOPdnrh8Q== string result2 = SecurityHelper.AesDecrypt(result1, key); Console.WriteLine(result2); //张三丰
更多: