• C# AES 加密与解密


    AES 算法加密(ECB模式) 将明文加密,加密后进行base64编码,返回密文

            /// <summary>
            /// AES 算法加密(ECB模式) 将明文加密,加密后进行base64编码,返回密文
            /// </summary>
            /// <param name="EncryptStr">明文</param>
            /// <param name="Key">密钥</param>
            /// <returns>加密后base64编码的密文</returns>
            public static string AesEncryptor_Base64(string EncryptStr, string Key)
            {
                try
                {
                    //byte[] keyArray = Encoding.UTF8.GetBytes(Key);
                    byte[] keyArray = Convert.FromBase64String(Key);
                    byte[] toEncryptArray = Encoding.UTF8.GetBytes(EncryptStr);
    
                    RijndaelManaged rDel = new RijndaelManaged();
                    rDel.Key = keyArray;
                    rDel.Mode = CipherMode.ECB;
                    rDel.Padding = PaddingMode.PKCS7;
    
                    ICryptoTransform cTransform = rDel.CreateEncryptor();
                    byte[] resultArray = cTransform.TransformFinalBlock(toEncryptArray, 0, toEncryptArray.Length);
    
                    return Convert.ToBase64String(resultArray, 0, resultArray.Length);
                }
                catch (Exception ex)
                {
                    return null;
                }
            }

    AES 算法解密(ECB模式) 将密文base64解码进行解密,返回明文

            /// <summary>
            /// AES 算法解密(ECB模式) 将密文base64解码进行解密,返回明文
            /// </summary>
            /// <param name="DecryptStr">密文</param>
            /// <param name="Key">密钥</param>
            /// <returns>明文</returns>
            public static string AesDecryptor_Base64(string DecryptStr, string Key)
            {
                try
                {
                    //byte[] keyArray = Encoding.UTF8.GetBytes(Key);
                    byte[] keyArray = Convert.FromBase64String(Key);
                    byte[] toEncryptArray = Convert.FromBase64String(DecryptStr);
    
                    RijndaelManaged rDel = new RijndaelManaged();
                    rDel.Key = keyArray;
                    rDel.Mode = CipherMode.ECB;
                    rDel.Padding = PaddingMode.PKCS7;
    
                    ICryptoTransform cTransform = rDel.CreateDecryptor();
                    byte[] resultArray = cTransform.TransformFinalBlock(toEncryptArray, 0, toEncryptArray.Length);
    
                    return Encoding.UTF8.GetString(resultArray);//  UTF8Encoding.UTF8.GetString(resultArray);
                }
                catch (Exception ex)
                {
                    return null;
                }
            }

    AES 算法加密(ECB模式) 将明文加密,加密后进行Hex编码,返回密文

            /// <summary>
            ///AES 算法加密(ECB模式) 将明文加密,加密后进行Hex编码,返回密文
            /// </summary>
            /// <param name="str">明文</param>
            /// <param name="key">密钥</param>
            /// <returns>加密后Hex编码的密文</returns>
            public static string AesEncryptor_Hex(string str, string key)
            {
                if (string.IsNullOrEmpty(str)) return null;
                Byte[] toEncryptArray = Encoding.UTF8.GetBytes(str);
    
                System.Security.Cryptography.RijndaelManaged rm = new System.Security.Cryptography.RijndaelManaged
                {
                    Key = StrToHexByte(key),
                    Mode = System.Security.Cryptography.CipherMode.ECB,
                    Padding = System.Security.Cryptography.PaddingMode.PKCS7
                };
    
                System.Security.Cryptography.ICryptoTransform cTransform = rm.CreateEncryptor();
                Byte[] resultArray = cTransform.TransformFinalBlock(toEncryptArray, 0, toEncryptArray.Length);
    
                return ToHexString(resultArray);
            }

    AES 算法解密(ECB模式) 将密文Hex解码后进行解密,返回明文

            /// <summary>
            ///AES 算法解密(ECB模式) 将密文Hex解码后进行解密,返回明文
            /// </summary>
            /// <param name="str">密文</param>
            /// <param name="key">密钥</param>
            /// <returns>明文</returns>
            public static string AesDecryptor_Hex(string str, string key)
            {
                if (string.IsNullOrEmpty(str)) return null;
                Byte[] toEncryptArray = StrToHexByte(str);
    
                System.Security.Cryptography.RijndaelManaged rm = new System.Security.Cryptography.RijndaelManaged
                {
                    Key = StrToHexByte(key),
                    Mode = System.Security.Cryptography.CipherMode.ECB,
                    Padding = System.Security.Cryptography.PaddingMode.PKCS7
                };
    
                System.Security.Cryptography.ICryptoTransform cTransform = rm.CreateDecryptor();
                Byte[] resultArray = cTransform.TransformFinalBlock(toEncryptArray, 0, toEncryptArray.Length);
    
                return Encoding.UTF8.GetString(resultArray);
            }

    byte数组Hex编码与字符串进行Hex解码(Hex.decodeHex())

            /// <summary>
            /// byte数组Hex编码
            /// </summary>
            /// <param name="bytes">需要进行编码的byte[]</param>
            /// <returns></returns>
            public static string ToHexString(byte[] bytes) // 0xae00cf => "AE00CF "
            {
                string hexString = string.Empty;
                if (bytes != null)
                {
                    StringBuilder strB = new StringBuilder();
                    for (int i = 0; i < bytes.Length; i++)
                    {
                        strB.Append(bytes[i].ToString("X2"));
                    }
                    hexString = strB.ToString();
                }
                return hexString;
            }
            /// <summary> 
            /// 字符串进行Hex解码(Hex.decodeHex())
            /// </summary> 
            /// <param name="hexString">需要进行解码的字符串</param> 
            /// <returns></returns> 
            public static byte[] StrToHexByte(string hexString)
            {
                hexString = hexString.Replace(" ", "");
                if ((hexString.Length % 2) != 0)
                    hexString += " ";
                byte[] returnBytes = new byte[hexString.Length / 2];
                for (int i = 0; i < returnBytes.Length; i++)
                    returnBytes[i] = Convert.ToByte(hexString.Substring(i * 2, 2), 16);
                return returnBytes;
            }

    AES加密、解密封装

            /// <summary>
            /// 对象转成Json并加密
            /// </summary>
            /// <param name="str"></param>
            /// <returns></returns>
            public string DataAes(object str)
            {
                string json_str = new System.Web.Script.Serialization.JavaScriptSerializer().Serialize(str);
                string miwen = AESCryptos.AesEncryptor_Base64(json_str, key);
                return miwen;
            }
    
            /// <summary>
            /// 解密并Json解析成对象
            /// </summary>
            /// <param name="str"></param>
            /// <returns></returns>
            public T JsonToModel<T>(string str)
            {
                string mingwen = AESCryptos.AesDecryptor_Base64(str, key);
                System.Web.Script.Serialization.JavaScriptSerializer jss = new System.Web.Script.Serialization.JavaScriptSerializer();
                T Model = jss.Deserialize<T>(mingwen);
                return Model;
            }
    
            /// <summary>
            /// 解密并Json解析成list
            /// </summary>
            /// <param name="str"></param>
            /// <returns></returns>
            public IList<T> JsonToList<T>(string str)
            {
                string mingwen = AESCryptos.AesDecryptor_Base64(str, key);
                System.Web.Script.Serialization.JavaScriptSerializer jss = new System.Web.Script.Serialization.JavaScriptSerializer();
                IList<T> list = jss.Deserialize<List<T>>(mingwen);
                return list;
            }

    Base64加密

    string str= "汉字";
    str= Convert.ToBase64String(UnicodeEncoding.UTF8.GetBytes(str));

    Base64解密

    string str= HttpUtility.UrlDecode(Request["str"], System.Text.Encoding.UTF8).Replace(" ", "+");
    str= UnicodeEncoding.UTF8.GetString(Convert.FromBase64String(str));
  • 相关阅读:
    python学习-类属性和实例属性
    python学习-名字管理
    phalcon安装-遇坑php-config is not installed 解决方法
    利用scp 远程上传下载文件/文件夹
    linux tar打包
    ELK logstash 启动慢的解决方法
    shell脚本学习
    ELK日志系统:Filebeat使用及Kibana如何设置登录认证(转)
    elastic5.4安装错误解决
    CentOS 6、7 安装 Golang
  • 原文地址:https://www.cnblogs.com/cang12138/p/6688908.html
Copyright © 2020-2023  润新知