.Net Core AES加密解密

一、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
View Code

使用示例:

string key = "123";
string result1 = SecurityHelper.AesEncrypt("张三丰", key);
Console.WriteLine(result1); //o7TgaEbkrWOzUMOPdnrh8Q==

string result2 = SecurityHelper.AesDecrypt(result1, key);
Console.WriteLine(result2); //张三丰

 

更多:

.Net Core Base64加密解密

.Net Core Md5加密整理

.Net Core HTML解析利器之HtmlAgilityPack

posted @ 2018-04-12 15:03  天马3798  阅读(8789)  评论(1编辑  收藏  举报