AES简介
AES, Advanced Encryption Standard,其实是一套标准:FIPS 197,而我们所说的AES算法其实是Rijndael算法(微信小程序加密传输就是用这个加密算法的)。
NIST (National INstitute of Standards and Technology) 在1997年9月12日公开征集更高效更安全的替代DES加密算法,第一轮共有15种算法入选,其中5种算法入围了决赛,分别是MARS,RC6,Rijndael,Serpent和Twofish。又经过3年的验证、评测及公众讨论之后Rijndael算法最终入选。
Rijndael算法
Rijndael算法是由比利时学者Joan Daemen和Vincent Rijmen所提出的,算法的名字就由两位作者的名字组合而成。Rijndael的优势在于集安全性、性能、效率、可实现性及灵活性与一体。
下面是C#类库实现该算法的代码类库,大家可以参考提意见
using System;
using System.Collections.Generic;
using System.Security.Cryptography;
using System.Text;
namespace Security.Common
{
/// <summary>
/// AES加密,高级加密法
/// </summary>
public class AesClass
{
/// <summary>
/// AES-128/AES-192/AES-256
/// </summary>
private static string key = "1234567890123abc";
/// <summary>
/// AES 加密
/// </summary>
/// <param name="str">明文(待加密)</param>
/// <param name="key">密文</param>
/// <returns></returns>
public static string aesEncrypt(string encryptStr)
{
if (string.IsNullOrEmpty(encryptStr)) return null;
Byte[] toEncryptArray = Encoding.UTF8.GetBytes(encryptStr);
RijndaelManaged rm = new RijndaelManaged
{
Key = Encoding.UTF8.GetBytes(key),
Mode = CipherMode.ECB,
Padding = PaddingMode.PKCS7
};
ICryptoTransform cTransform = rm.CreateEncryptor();
Byte[] resultArray = cTransform.TransformFinalBlock(toEncryptArray, 0, toEncryptArray.Length);
//需要UTF8处理一下,否则
return Convert.ToBase64String(Encoding.UTF8.GetBytes( Convert.ToBase64String(resultArray, 0, resultArray.Length)));
}
/// <summary>
/// AES 解密
/// </summary>
/// <param name="str">明文(待解密)</param>
/// <param name="key">密文</param>
/// <returns></returns>
public static string aesDecrypt(string decryptStr)
{
if (string.IsNullOrEmpty(decryptStr)) return null;
Byte[] toEncryptArray = Convert.FromBase64String(Encoding.UTF8.GetString( Convert.FromBase64String(decryptStr)));
RijndaelManaged rm = new RijndaelManaged
{
Key = Encoding.UTF8.GetBytes(key),
Mode = CipherMode.ECB,
Padding = PaddingMode.PKCS7
};
ICryptoTransform cTransform = rm.CreateDecryptor();
Byte[] resultArray = cTransform.TransformFinalBlock(toEncryptArray, 0, toEncryptArray.Length);
return Encoding.UTF8.GetString(resultArray);
}
}
}
版权声明:本文为weixin_46681279原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。