zoukankan      html  css  js  c++  java
  • C# -DES加解密帮助类

      1 class DesHelper
      2     {
      3         #region DES 加密
      4 
      5         /// <summary>
      6         /// 加密(Hex)
      7         /// Add by 成长的小猪(Jason.Song) on 2017/07/26
      8         /// </summary>
      9         /// <param name="encryptString">待加密的字符串</param>
     10         /// <param name="encryptKey">加密密钥(8位任意字符)</param>
     11         /// <param name="encoding">字符编码</param>
     12         /// <param name="cipher">运算模式</param>
     13         /// <param name="padding">填充模式</param>
     14         /// <returns></returns>
     15         public static string EncryptToHexString(string encryptString, string encryptKey, Encoding encoding,
     16             CipherMode cipher = CipherMode.ECB, PaddingMode padding = PaddingMode.Zeros)
     17         {
     18             //为了安全级别更高,这个地方建议将密钥进行MD5后取8位,这里我就不加此方法啦
     19             //var keyBytes = encoding.GetBytes(Md5Helper.GetMd5HashString(encryptKey, encoding).Substring(0, 8));
     20             var keyBytes = encoding.GetBytes(encryptKey);
     21             var inputBytes = encoding.GetBytes(encryptString);
     22             var outputBytes = EncryptToDesBytes(inputBytes, keyBytes, cipher, padding);
     23             var sBuilder = new StringBuilder();
     24             foreach (var b in outputBytes)
     25             {
     26                 sBuilder.Append(b.ToString("X2"));
     27             }
     28             return sBuilder.ToString();
     29         }
     30 
     31         /// <summary>
     32         /// 加密(Base64)
     33         /// Add by 成长的小猪(Jason.Song) on 2017/07/26
     34         /// </summary>
     35         /// <param name="encryptString">待加密的字符串</param>
     36         /// <param name="encryptKey">加密密钥(8位任意字符)</param>
     37         /// <param name="encoding">字符编码</param>
     38         /// <param name="cipher">运算模式</param>
     39         /// <param name="padding">填充模式</param>
     40         /// <returns></returns>
     41         public static string EncryptToBase64String(string encryptString, string encryptKey, Encoding encoding,
     42             CipherMode cipher = CipherMode.ECB, PaddingMode padding = PaddingMode.Zeros)
     43         {
     44             //为了安全级别更高,这个地方建议将密钥进行MD5后取8位,这里我就不加此方法啦
     45             //var keyBytes = encoding.GetBytes(Md5Helper.GetMd5HashString(encryptKey, encoding).Substring(0, 8));
     46             var keyBytes = encoding.GetBytes(encryptKey);
     47             var inputBytes = encoding.GetBytes(encryptString);
     48             var outputBytes = EncryptToDesBytes(inputBytes, keyBytes, cipher, padding);
     49             return Convert.ToBase64String(outputBytes);
     50         }
     51 
     52         /// <summary>
     53         /// 加密
     54         /// Add by 成长的小猪(Jason.Song) on 2017/07/26
     55         /// </summary>
     56         /// <param name="encryptBytes">待加密的字节数组</param>
     57         /// <param name="keyBytes">加密密钥字节数组</param>
     58         /// <param name="cipher">运算模式</param>
     59         /// <param name="padding">填充模式</param>
     60         /// <returns></returns>
     61         public static byte[] EncryptToDesBytes(byte[] encryptBytes, byte[] keyBytes,
     62             CipherMode cipher = CipherMode.ECB, PaddingMode padding = PaddingMode.Zeros)
     63         {
     64             var des = new DESCryptoServiceProvider
     65             {
     66                 Key = keyBytes,
     67                 IV = keyBytes,
     68                 Mode = cipher,
     69                 Padding = padding
     70             };
     71             var outputBytes = des.CreateEncryptor().TransformFinalBlock(encryptBytes, 0, encryptBytes.Length);
     72             return outputBytes;
     73         }
     74 
     75         #endregion
     76 
     77         #region DES 解密
     78 
     79         /// <summary>
     80         /// 解密(Hex)
     81         /// Add by 成长的小猪(Jason.Song) on 2017/07/26
     82         /// </summary>
     83         /// <param name="decryptString">待解密的字符串</param>
     84         /// <param name="decryptKey">解密密钥(8位任意字符)</param>
     85         /// <param name="encoding">字符编码</param>
     86         /// <param name="cipher">运算模式</param>
     87         /// <param name="padding">填充模式</param>
     88         /// <returns></returns>
     89         public static string DecryptByHexString(string decryptString, string decryptKey, Encoding encoding,
     90             CipherMode cipher = CipherMode.ECB, PaddingMode padding = PaddingMode.PKCS7)
     91         {
     92             //为了安全级别更高,这个地方建议将密钥进行MD5后取8位,这里我就不加此方法啦
     93             //var keyBytes = encoding.GetBytes(Md5Helper.GetMd5HashString(encryptKey, encoding).Substring(0, 8));
     94             var keyBytes = encoding.GetBytes(decryptKey);
     95             var inputBytes = new byte[decryptString.Length / 2];
     96             for (var i = 0; i < inputBytes.Length; i++)
     97             {
     98                 inputBytes[i] = Convert.ToByte(decryptString.Substring(i * 2, 2), 16);
     99             }
    100             var outputBytes = DecryptByDesBytes(inputBytes, keyBytes, cipher, padding);
    101             return encoding.GetString(outputBytes).TrimEnd('');
    102         }
    103 
    104         /// <summary>
    105         /// 解密(Base64)
    106         /// Add by 成长的小猪(Jason.Song) on 2017/07/26
    107         /// </summary>
    108         /// <param name="decryptString">待解密的字符串</param>
    109         /// <param name="decryptKey">解密密钥(8位任意字符)</param>
    110         /// <param name="encoding">字符编码</param>
    111         /// <param name="cipher">运算模式</param>
    112         /// <param name="padding">填充模式</param>
    113         /// <returns></returns>
    114         public static string DecryptByBase64String(string decryptString, string decryptKey, Encoding encoding,
    115             CipherMode cipher = CipherMode.ECB, PaddingMode padding = PaddingMode.Zeros)
    116         {
    117             //为了安全级别更高,这个地方建议将密钥进行MD5后取8位,这里我就不加此方法啦
    118             //var keyBytes = encoding.GetBytes(Md5Helper.GetMd5HashString(encryptKey, encoding).Substring(0, 8));
    119             var keyBytes = encoding.GetBytes(decryptKey);
    120             var inputBytes = Convert.FromBase64String(decryptString);
    121             var outputBytes = DecryptByDesBytes(inputBytes, keyBytes, cipher, padding);
    122             return encoding.GetString(outputBytes).TrimEnd('');
    123         }
    124 
    125         /// <summary>
    126         /// 解密
    127         /// Add by 成长的小猪(Jason.Song) on 2017/07/26
    128         /// </summary>
    129         /// <param name="decryptBytes">待解密的字节数组</param>
    130         /// <param name="keyBytes">解密密钥字节数组</param>
    131         /// <param name="cipher">运算模式</param>
    132         /// <param name="padding">填充模式</param>
    133         /// <returns></returns>
    134         public static byte[] DecryptByDesBytes(byte[] decryptBytes, byte[] keyBytes,
    135             CipherMode cipher = CipherMode.ECB, PaddingMode padding = PaddingMode.Zeros)
    136         {
    137             var des = new DESCryptoServiceProvider
    138             {
    139                 Key = keyBytes,
    140                 IV = keyBytes,
    141                 Mode = cipher,
    142                 Padding = padding
    143             };
    144             var outputBytes = des.CreateDecryptor().TransformFinalBlock(decryptBytes, 0, decryptBytes.Length);
    145             return outputBytes;
    146         }
    147 
    148         #endregion
    149 
    150     }
    365个夜晚,我希望做到两天更一篇博客。加油,小白!
  • 相关阅读:
    冲刺一(5)
    冲刺一(4)
    冲刺一(3)
    构建之法阅读笔记之二
    冲刺一(2)
    冲刺一(1)
    第9周总结
    热词顶会分析
    第8周总结
    构建之法阅读笔记之一
  • 原文地址:https://www.cnblogs.com/qq2806933146xiaobai/p/14620784.html
Copyright © 2011-2022 走看看