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('\0');
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('\0');
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     }
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.
  • 32.
  • 33.
  • 34.
  • 35.
  • 36.
  • 37.
  • 38.
  • 39.
  • 40.
  • 41.
  • 42.
  • 43.
  • 44.
  • 45.
  • 46.
  • 47.
  • 48.
  • 49.
  • 50.
  • 51.
  • 52.
  • 53.
  • 54.
  • 55.
  • 56.
  • 57.
  • 58.
  • 59.
  • 60.
  • 61.
  • 62.
  • 63.
  • 64.
  • 65.
  • 66.
  • 67.
  • 68.
  • 69.
  • 70.
  • 71.
  • 72.
  • 73.
  • 74.
  • 75.
  • 76.
  • 77.
  • 78.
  • 79.
  • 80.
  • 81.
  • 82.
  • 83.
  • 84.
  • 85.
  • 86.
  • 87.
  • 88.
  • 89.
  • 90.
  • 91.
  • 92.
  • 93.
  • 94.
  • 95.
  • 96.
  • 97.
  • 98.
  • 99.
  • 100.
  • 101.
  • 102.
  • 103.
  • 104.
  • 105.
  • 106.
  • 107.
  • 108.
  • 109.
  • 110.
  • 111.
  • 112.
  • 113.
  • 114.
  • 115.
  • 116.
  • 117.
  • 118.
  • 119.
  • 120.
  • 121.
  • 122.
  • 123.
  • 124.
  • 125.
  • 126.
  • 127.
  • 128.
  • 129.
  • 130.
  • 131.
  • 132.
  • 133.
  • 134.
  • 135.
  • 136.
  • 137.
  • 138.
  • 139.
  • 140.
  • 141.
  • 142.
  • 143.
  • 144.
  • 145.
  • 146.
  • 147.
  • 148.
  • 149.
  • 150.

 

作者:꧁执笔小白꧂