zoukankan      html  css  js  c++  java
  • C# AES 加密解密,微信敏感数据解密

    /// AES加密解密方式
    /// ECB模式不许偏移量iv
    /// 提供输出base64和Hex 16进制格式

      1 public class AES_Cipher
      2     {
      3         /// <summary>
      4         /// AES 算法加密(ECB模式) 将明文加密,加密后进行Hex编码,返回密文
      5         /// </summary>
      6         /// <param name="str">明文</param>
      7         /// <param name="key">密钥</param>
      8         /// <returns>加密后Hex编码的密文</returns>
      9         public static string AesEncryptor_ECB_Hex(string str, string key)
     10         {
     11             if (string.IsNullOrEmpty(str)) return null;
     12             Byte[] toEncryptArray = Encoding.UTF8.GetBytes(str);
     13 
     14             RijndaelManaged rm = new RijndaelManaged
     15             {
     16                 //Key = StrToHexByte(key),  //把key转成16进制
     17                 Key = Encoding.UTF8.GetBytes(key),
     18                 Mode = CipherMode.ECB,
     19                 Padding = PaddingMode.PKCS7
     20             };
     21 
     22             ICryptoTransform cTransform = rm.CreateEncryptor();
     23             Byte[] resultArray = cTransform.TransformFinalBlock(toEncryptArray, 0, toEncryptArray.Length);
     24 
     25             return ToHexString(resultArray);
     26         }
     27 
     28 
     29         /// <summary>
     30         ///AES 算法解密(ECB模式) 将密文Hex解码后进行解密,返回明文
     31         /// </summary>
     32         /// <param name="str">密文</param>
     33         /// <param name="key">密钥</param>
     34         /// <returns>明文</returns>
     35         public static string AesDecryptor_ECB_Hex(string str, string key)
     36         {
     37             if (string.IsNullOrEmpty(str)) return null;
     38             Byte[] toEncryptArray = StrToHexByte(str);
     39 
     40             RijndaelManaged rm = new RijndaelManaged
     41             {
     42                 //Key = StrToHexByte(key), //key16进制解码
     43                 Key = Encoding.UTF8.GetBytes(key),
     44                 Mode = CipherMode.ECB,
     45                 Padding = PaddingMode.PKCS7
     46             };
     47 
     48             ICryptoTransform cTransform = rm.CreateDecryptor();
     49             Byte[] resultArray = cTransform.TransformFinalBlock(toEncryptArray, 0, toEncryptArray.Length);
     50 
     51             return Encoding.UTF8.GetString(resultArray);
     52         }
     53 
     54         /// <summary>
     55         /// byte数组Hex编码
     56         /// </summary>
     57         /// <param name="bytes">需要进行编码的byte[]</param>
     58         /// <returns></returns>
     59         public static string ToHexString(byte[] bytes)
     60         {
     61             string hexString = string.Empty;
     62             if (bytes != null)
     63             {
     64                 StringBuilder strB = new StringBuilder();
     65                 for (int i = 0; i < bytes.Length; i++)
     66                 {
     67                     strB.Append(bytes[i].ToString("X2"));
     68                 }
     69                 hexString = strB.ToString();
     70             }
     71             return hexString;
     72         }
     73         /// <summary> 
     74         /// 字符串进行Hex解码(Hex.decodeHex())
     75         /// </summary> 
     76         /// <param name="hexString">需要进行解码的字符串</param> 
     77         /// <returns></returns> 
     78         public static byte[] StrToHexByte(string hexString)
     79         {
     80             hexString = hexString.Replace(" ", "");
     81             if ((hexString.Length % 2) != 0)
     82                 hexString += " ";
     83             byte[] returnBytes = new byte[hexString.Length / 2];
     84             for (int i = 0; i < returnBytes.Length; i++)
     85                 returnBytes[i] = Convert.ToByte(hexString.Substring(i * 2, 2), 16);
     86             return returnBytes;
     87         }
     88 
     89 
     90         /// <summary>
     91         /// AES 算法加密(ECB模式) 将明文加密,加密后进行Base64编码,返回密文
     92         /// </summary>
     93         /// <param name="str">明文</param>
     94         /// <param name="key">密钥</param>
     95         /// <returns>加密后Base64编码的密文</returns>
     96         public static string AesEncryptor_ECB_Base64(string str, string key)
     97         {
     98             if (string.IsNullOrEmpty(str)) return null;
     99             Byte[] toEncryptArray = Encoding.UTF8.GetBytes(str);
    100 
    101             RijndaelManaged rm = new RijndaelManaged
    102             {
    103                 //Key = Convert.FromBase64String(key), //如果key是base64编码过的就解码转换,如果按照规范明文和key都应该传入base64
    104                 Key = Encoding.UTF8.GetBytes(key),
    105                 Mode = CipherMode.ECB,
    106                 Padding = PaddingMode.PKCS7
    107             };
    108 
    109             ICryptoTransform cTransform = rm.CreateEncryptor();
    110             Byte[] resultArray = cTransform.TransformFinalBlock(toEncryptArray, 0, toEncryptArray.Length);
    111 
    112             return Convert.ToBase64String(resultArray);
    113         }
    114 
    115         /// <summary>
    116         ///AES 算法解密(ECB模式) 将密文Base64解码后进行解密,返回明文
    117         /// </summary>
    118         /// <param name="base64Str">密文(base64编码格式)</param>
    119         /// <param name="key">密钥</param>
    120         /// <returns>明文</returns>
    121         public static string AesDecryptor_ECB_Base64(string base64Str, string key)
    122         {
    123             if (string.IsNullOrEmpty(base64Str)) return null;
    124             Byte[] toEncryptArray = Convert.FromBase64String(base64Str);
    125 
    126             RijndaelManaged rm = new RijndaelManaged
    127             {
    128                 //Key = Convert.FromBase64String(key), //如果key是base64编码过的就解码转换,如果按照规范密文和key都应该传入base64
    129                 Key = Encoding.UTF8.GetBytes(key),
    130                 Mode = CipherMode.ECB,
    131                 Padding = PaddingMode.PKCS7
    132             };
    133 
    134             ICryptoTransform cTransform = rm.CreateDecryptor();
    135             Byte[] resultArray = cTransform.TransformFinalBlock(toEncryptArray, 0, toEncryptArray.Length);
    136 
    137             return Encoding.UTF8.GetString(resultArray);
    138         }

    微信敏感数据解密

     1         /// <summary>
     2         /// 微信敏感数据解密
     3         /// </summary>
     4         /// <param name="encryptedData">密文</param>
     5         /// <param name="iv">加密算法的初始向量</param>
     6         /// <param name="sessionKey">登录获取的session_key</param>
     7         /// <returns></returns>
     8         public static string AESDecrypt(string encryptedData, string iv, string sessionKey)
     9         {
    10             var encryptedDataByte = Convert.FromBase64String(encryptedData);
    11             var rijndaelCipher = new RijndaelManaged
    12             {
    13                 Key = Convert.FromBase64String(sessionKey),
    14                 IV = Convert.FromBase64String(iv),
    15                 Mode = CipherMode.CBC,
    16                 Padding = PaddingMode.PKCS7
    17             };
    18 
    19             var transform = rijndaelCipher.CreateDecryptor();
    20             var plainText = transform.TransformFinalBlock(encryptedDataByte, 0, encryptedDataByte.Length);
    21             var result = Encoding.UTF8.GetString(plainText);
    22             return result;
    23         }
  • 相关阅读:
    【Ruby on Rails 学习五】Ruby语言的方法
    【Ruby on Rails 学习六】Ruby 类 的入门
    【Ruby on Rails 学习三】Ruby 基本数据类型(类、类的实例、对象)
    【深度学习笔记】第 1 课:从机器学习到深度学习
    【Ruby on Rails学习二】在线学习资料的整理
    【Ruby on Rails 学习一】ubuntu14.04配置rvm与ruby
    THREE.JS + Blender(obj、mtl加载代码)
    全站查询和分页显示——在线留言板2
    增加留言版块——在线留言板1
    html加载速度技术点
  • 原文地址:https://www.cnblogs.com/tongyi/p/15400785.html
Copyright © 2011-2022 走看看