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('\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     }
复制代码

 

posted @   ꧁执笔小白꧂  阅读(199)  评论(0编辑  收藏  举报
编辑推荐:
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· 什么是nginx的强缓存和协商缓存
· 一文读懂知识蒸馏
· Manus爆火,是硬核还是营销?
点击右上角即可分享
微信分享提示