zoukankan      html  css  js  c++  java
  • .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

  • 相关阅读:
    android120 zhihuibeijing 开机页面
    Android View.onMeasure方法的理解
    android119 侧滑菜单
    android事件拦截处理机制详解
    Android应用在不同版本间兼容性处理
    虚拟机重置密码
    ESXi虚拟机开机进入bios的方法
    [日常工作]Win2008r2 以及更高版本的操作系统安装Oracle10.2.0.5
    Linux下安装oracle的过程
    Oracle18c Exadata 版本安装介质安装失败。
  • 原文地址:https://www.cnblogs.com/tianma3798/p/8807816.html
Copyright © 2011-2022 走看看