[C#] 简单的 Helper 封装 -- SecurityHelper 安全助手:封装加密算法(MD5、SHA、HMAC、DES、RSA)

  1 using System;
  2 using System.IO;
  3 using System.Security.Cryptography;
  4 using System.Text;
  5
  6 namespace Wen.Helpers
  7 {
  8     /// <summary>
  9     /// 安全助手
 10     /// </summary>
 11     public sealed class SecurityHelper
 12     {
 13         private static readonly byte [] IvBytes = { 0x01, 0x23, 0x45, 0x67, 0x89, 0xAB, 0xCD, 0xEF };
 14
 15         #region 通用加密算法
 16
 17         /// <summary>
 18         /// 哈希加密算法
 19         /// </summary>
 20         /// <param name="hashAlgorithm"> 所有加密哈希算法实现均必须从中派生的基类 </param>
 21         /// <param name="input"> 待加密的字符串 </param>
 22         /// <param name="encoding"> 字符编码 </param>
 23         /// <returns></returns>
 24         private static string HashEncrypt( HashAlgorithm hashAlgorithm, string input, Encoding encoding)
 25         {
 26             var data = hashAlgorithm.ComputeHash(encoding.GetBytes(input));
 27
 28             return BitConverter .ToString(data).Replace( "-", "" );
 29         }
 30
 31         /// <summary>
 32         /// 验证哈希值
 33         /// </summary>
 34         /// <param name="hashAlgorithm"> 所有加密哈希算法实现均必须从中派生的基类 </param>
 35         /// <param name="unhashedText"> 未加密的字符串 </param>
 36         /// <param name="hashedText"> 经过加密的哈希值 </param>
 37         /// <param name="encoding"> 字符编码 </param>
 38         /// <returns></returns>
 39         private static bool VerifyHashValue( HashAlgorithm hashAlgorithm, string unhashedText, string hashedText,
 40             Encoding encoding)
 41         {
 42             return string .Equals(HashEncrypt(hashAlgorithm, unhashedText, encoding), hashedText,
 43                 StringComparison .OrdinalIgnoreCase);
 44         }
 45
 46         #endregion 通用加密算法
 47
 48         #region 哈希加密算法
 49
 50         #region MD5 算法
 51
 52         /// <summary>
 53         /// MD5 加密
 54         /// </summary>
 55         /// <param name="input"> 待加密的字符串 </param>
 56         /// <param name="encoding"> 字符编码 </param>
 57         /// <returns></returns>
 58         public static string MD5Encrypt( string input, Encoding encoding)
 59         {
 60             return HashEncrypt(MD5 .Create(), input, encoding);
 61         }
 62
 63         /// <summary>
 64         /// 验证 MD5 值
 65         /// </summary>
 66         /// <param name="input"> 未加密的字符串 </param>
 67         /// <param name="encoding"> 字符编码 </param>
 68         /// <returns></returns>
 69         public static bool VerifyMD5Value( string input, Encoding encoding)
 70         {
 71             return VerifyHashValue(MD5 .Create(), input, MD5Encrypt(input, encoding), encoding);
 72         }
 73
 74         #endregion MD5 算法
 75
 76         #region SHA1 算法
 77
 78         /// <summary>
 79         /// SHA1 加密
 80         /// </summary>
 81         /// <param name="input"> 要加密的字符串 </param>
 82         /// <param name="encoding"> 字符编码 </param>
 83         /// <returns></returns>
 84         public static string SHA1Encrypt( string input, Encoding encoding)
 85         {
 86             return HashEncrypt(SHA1 .Create(), input, encoding);
 87         }
 88
 89         /// <summary>
 90         /// 验证 SHA1 值
 91         /// </summary>
 92         /// <param name="input"> 未加密的字符串 </param>
 93         /// <param name="encoding"> 字符编码 </param>
 94         /// <returns></returns>
 95         public static bool VerifySHA1Value( string input, Encoding encoding)
 96         {
 97             return VerifyHashValue(SHA1 .Create(), input, SHA1Encrypt(input, encoding), encoding);
 98         }
 99
100         #endregion SHA1 算法
101
102         #region SHA256 算法
103
104         /// <summary>
105         /// SHA256 加密
106         /// </summary>
107         /// <param name="input"> 要加密的字符串 </param>
108         /// <param name="encoding"> 字符编码 </param>
109         /// <returns></returns>
110         public static string SHA256Encrypt( string input, Encoding encoding)
111         {
112             return HashEncrypt(SHA256 .Create(), input, encoding);
113         }
114
115         /// <summary>
116         /// 验证 SHA256 值
117         /// </summary>
118         /// <param name="input"> 未加密的字符串 </param>
119         /// <param name="encoding"> 字符编码 </param>
120         /// <returns></returns>
121         public static bool VerifySHA256Value( string input, Encoding encoding)
122         {
123             return VerifyHashValue(SHA256 .Create(), input, SHA256Encrypt(input, encoding), encoding);
124         }
125
126         #endregion SHA256 算法
127
128         #region SHA384 算法
129
130         /// <summary>
131         /// SHA384 加密
132         /// </summary>
133         /// <param name="input"> 要加密的字符串 </param>
134         /// <param name="encoding"> 字符编码 </param>
135         /// <returns></returns>
136         public static string SHA384Encrypt( string input, Encoding encoding)
137         {
138             return HashEncrypt(SHA384 .Create(), input, encoding);
139         }
140
141         /// <summary>
142         /// 验证 SHA384 值
143         /// </summary>
144         /// <param name="input"> 未加密的字符串 </param>
145         /// <param name="encoding"> 字符编码 </param>
146         /// <returns></returns>
147         public static bool VerifySHA384Value( string input, Encoding encoding)
148         {
149             return VerifyHashValue(SHA256 .Create(), input, SHA384Encrypt(input, encoding), encoding);
150         }
151
152         #endregion SHA384 算法
153
154         #region SHA512 算法
155
156         /// <summary>
157         /// SHA512 加密
158         /// </summary>
159         /// <param name="input"> 要加密的字符串 </param>
160         /// <param name="encoding"> 字符编码 </param>
161         /// <returns></returns>
162         public static string SHA512Encrypt( string input, Encoding encoding)
163         {
164             return HashEncrypt(SHA512 .Create(), input, encoding);
165         }
166
167         /// <summary>
168         /// 验证 SHA512 值
169         /// </summary>
170         /// <param name="input"> 未加密的字符串 </param>
171         /// <param name="encoding"> 字符编码 </param>
172         /// <returns></returns>
173         public static bool VerifySHA512Value( string input, Encoding encoding)
174         {
175             return VerifyHashValue(SHA512 .Create(), input, SHA512Encrypt(input, encoding), encoding);
176         }
177
178         #endregion SHA512 算法
179
180         #region HMAC-MD5 加密
181
182         /// <summary>
183         /// HMAC-MD5 加密
184         /// </summary>
185         /// <param name="input"> 要加密的字符串 </param>
186         /// <param name="key"> 密钥 </param>
187         /// <param name="encoding"> 字符编码 </param>
188         /// <returns></returns>
189         public static string HMACSMD5Encrypt( string input, string key, Encoding encoding)
190         {
191             return HashEncrypt(new HMACMD5 (encoding.GetBytes(key)), input, encoding);
192         }
193
194         #endregion HMAC-MD5 加密
195
196         #region HMAC-SHA1 加密
197
198         /// <summary>
199         /// HMAC-SHA1 加密
200         /// </summary>
201         /// <param name="input"> 要加密的字符串 </param>
202         /// <param name="key"> 密钥 </param>
203         /// <param name="encoding"> 字符编码 </param>
204         /// <returns></returns>
205         public static string HMACSHA1Encrypt( string input, string key, Encoding encoding)
206         {
207             return HashEncrypt(new HMACSHA1 (encoding.GetBytes(key)), input, encoding);
208         }
209
210         #endregion HMAC-SHA1 加密
211
212         #region HMAC-SHA256 加密
213
214         /// <summary>
215         /// HMAC-SHA256 加密
216         /// </summary>
217         /// <param name="input"> 要加密的字符串 </param>
218         /// <param name="key"> 密钥 </param>
219         /// <param name="encoding"> 字符编码 </param>
220         /// <returns></returns>
221         public static string HMACSHA256Encrypt( string input, string key, Encoding encoding)
222         {
223             return HashEncrypt(new HMACSHA256 (encoding.GetBytes(key)), input, encoding);
224         }
225
226         #endregion HMAC-SHA256 加密
227
228         #region HMAC-SHA384 加密
229
230         /// <summary>
231         /// HMAC-SHA384 加密
232         /// </summary>
233         /// <param name="input"> 要加密的字符串 </param>
234         /// <param name="key"> 密钥 </param>
235         /// <param name="encoding"> 字符编码 </param>
236         /// <returns></returns>
237         public static string HMACSHA384Encrypt( string input, string key, Encoding encoding)
238         {
239             return HashEncrypt(new HMACSHA384 (encoding.GetBytes(key)), input, encoding);
240         }
241
242         #endregion HMAC-SHA384 加密
243
244         #region HMAC-SHA512 加密
245
246         /// <summary>
247         /// HMAC-SHA512 加密
248         /// </summary>
249         /// <param name="input"> 要加密的字符串 </param>
250         /// <param name="key"> 密钥 </param>
251         /// <param name="encoding"> 字符编码 </param>
252         /// <returns></returns>
253         public static string HMACSHA512Encrypt( string input, string key, Encoding encoding)
254         {
255             return HashEncrypt(new HMACSHA512 (encoding.GetBytes(key)), input, encoding);
256         }
257
258         #endregion HMAC-SHA512 加密
259
260         #endregion 哈希加密算法
261
262         #region 对称加密算法
263
264         #region Des 加解密
265
266         /// <summary>
267         /// DES 加密
268         /// </summary>
269         /// <param name="input"> 待加密的字符串 </param>
270         /// <param name="key"> 密钥(8位) </param>
271         /// <returns></returns>
272         public static string DESEncrypt( string input, string key)
273         {
274             try
275             {
276                 var keyBytes = Encoding .UTF8.GetBytes(key);
277                 //var ivBytes = Encoding.UTF8.GetBytes(iv);
278
279                 var des = DES .Create();
280                 des.Mode = CipherMode .ECB; //兼容其他语言的 Des 加密算法
281                 des.Padding = PaddingMode .Zeros; //自动补 0
282
283                 using (var ms = new MemoryStream ())
284                 {
285                     var data = Encoding .UTF8.GetBytes(input);
286
287                     using (var cs = new CryptoStream (ms, des.CreateEncryptor(keyBytes, IvBytes), CryptoStreamMode .Write)
288                         )
289                     {
290                         cs.Write(data, 0, data.Length);
291                         cs.FlushFinalBlock();
292                     }
293
294                     return Convert .ToBase64String(ms.ToArray());
295                 }
296             }
297             catch
298             {
299                 return input;
300             }
301         }
302
303         /// <summary>
304         /// DES 解密
305         /// </summary>
306         /// <param name="input"> 待解密的字符串 </param>
307         /// <param name="key"> 密钥(8位) </param>
308         /// <returns></returns>
309         public static string DESDecrypt( string input, string key)
310         {
311             try
312             {
313                 var keyBytes = Encoding .UTF8.GetBytes(key);
314                 //var ivBytes = Encoding.UTF8.GetBytes(iv);
315
316                 var des = DES .Create();
317                 des.Mode = CipherMode .ECB; //兼容其他语言的Des加密算法
318                 des.Padding = PaddingMode .Zeros; //自动补0
319
320                 using (var ms = new MemoryStream ())
321                 {
322                     var data = Convert .FromBase64String(input);
323
324                     using (var cs = new CryptoStream (ms, des.CreateDecryptor(keyBytes, IvBytes), CryptoStreamMode .Write)
325                         )
326                     {
327                         cs.Write(data, 0, data.Length);
328
329                         cs.FlushFinalBlock();
330                     }
331
332                     return Encoding .UTF8.GetString(ms.ToArray());
333                 }
334             }
335             catch
336             {
337                 return input;
338             }
339         }
340
341         #endregion Des 加解密
342
343         #endregion 对称加密算法
344
345         #region 非对称加密算法
346
347         /// <summary>
348         /// 生成 RSA 公钥和私钥
349         /// </summary>
350         /// <param name="publicKey"> 公钥 </param>
351         /// <param name="privateKey"> 私钥 </param>
352         public static void GenerateRSAKeys( out string publicKey, out string privateKey)
353         {
354             using (var rsa = new RSACryptoServiceProvider ())
355             {
356                 publicKey = rsa.ToXmlString( false );
357                 privateKey = rsa.ToXmlString( true );
358             }
359         }
360
361         /// <summary>
362         /// RSA 加密
363         /// </summary>
364         /// <param name="publickey"> 公钥 </param>
365         /// <param name="content"> 待加密的内容 </param>
366         /// <returns> 经过加密的字符串 </returns>
367         public static string RSAEncrypt( string publickey, string content)
368         {
369             var rsa = new RSACryptoServiceProvider();
370             rsa.FromXmlString(publickey);
371             var cipherbytes = rsa.Encrypt(Encoding .UTF8.GetBytes(content), false);
372
373             return Convert .ToBase64String(cipherbytes);
374         }
375
376         /// <summary>
377         /// RSA 解密
378         /// </summary>
379         /// <param name="privatekey"> 私钥 </param>
380         /// <param name="content"> 待解密的内容 </param>
381         /// <returns> 解密后的字符串 </returns>
382         public static string RSADecrypt( string privatekey, string content)
383         {
384             var rsa = new RSACryptoServiceProvider();
385             rsa.FromXmlString(privatekey);
386             var cipherbytes = rsa.Decrypt(Convert .FromBase64String(content), false);
387
388             return Encoding .UTF8.GetString(cipherbytes);
389         }
390
391         #endregion 非对称加密算法
392     }
393 }


  【博主】反骨仔

  【出处】http://www.cnblogs.com/liqingwen/p/6155694.html

时间: 2024-10-29 19:11:12

[C#] 简单的 Helper 封装 -- SecurityHelper 安全助手:封装加密算法(MD5、SHA、HMAC、DES、RSA)的相关文章

初学者如何新建一个封装的类来封装方法

第一步 AppDelegate中引用导航器,并设置根视图,同时隐藏导航栏 - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; // Override point for c

面向对象三大特性:封装,继承,多态(一,封装和继承)

封装.继承和多态是面向对象程序设计的三个核心特性. 封装是面向对象技术中的一个重要概念,是一种信息隐藏技术,它体现了面向对象程序设计的思想. 继承是面向对象程序设计方法的一个重要手段,通过继承可以更有效地组织程序结构,明确类间的关系,育雏利用已有的类来完成更复杂.更深入的程序开发. 多态允许以一种统一的风格处理已存在的变量和相关的类,多态性使得向系统增加功能变的容易. 一.封装 封装的含义是:类的设计者把类设计成一个黑匣子,使用者只能看见类中定义的公共变量和公共方法,而看不见方法的具体实现细节,

一种控制智能卡模块封装尺寸的UV封装设备

本实用新型公开了一种控制智能卡模块封装尺寸的UV封装设备,包括工作台和安装在所述工作台上方的滴胶装置和UV固化炉,所述UV固化炉位于所述滴胶装置的右边,所述UV封装设备还包括低温装置,所述低温装置设置在所述滴胶装置和UV固化炉之间,且靠近所述滴胶装置,所述低温装置为朝向下端开口的中空箱体,所述低温装置的左侧面的底部和右侧面的底部各设一缺口,所述低温装置的下端扣合在所述工作台上,所述低温装置的后端通过第一支架与所述工作台连接.本实用新型的控制智能卡模块封装尺寸的UV封装设备,利用UV胶的黏度随温度

SpringJdbc持久层封装,Spring jdbcTemplate封装,springJdbc泛型Dao,Spring baseDao封装

SpringJdbc持久层封装,Spring jdbcTemplate封装,springJdbc泛型Dao,Spring baseDao封装 >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> ?Copyright 蕃薯耀 2017年7月6日 http://www.cnblogs.com/fanshuy

[C#] 简单的 Helper 封装 -- RandomHelper

1 using System; 2 3 namespace Wen.Helpers 4 { 5 /// <summary> 6 /// 随机数助手 7 /// </summary> 8 public sealed class RandomHelper 9 { 10 /// <summary> 11 /// 字符集合(去掉 0oO 这几个容易混淆的字符) 12 /// </summary> 13 private const string CharSet = &

[分享] 史上最简单的封装教程,五分钟学会封装系统(以封装Windows 7为例)

踏雁寻花 发表于 2015-8-23 23:31:28 https://www.itsk.com/thread-355923-1-4.html 学会封装,只需要掌握十个步骤.五分钟包你学会,不会不交学费~ 适合人群: 1.会装系统 2.了解PE的使用 3.对注册表有初步的了解 所需工具: 1.Windows系统镜像 2.PE(可以放到U盘,如果使用虚拟机封装系统,直接下载PE镜像即可) 3.磁盘清理工具(如Windows7瘦身工具.自由天空系统清理&减肥程序.注册表减肥工具等) 4.驱动包(如万

简单的struts2框架(四)---封装实体

接着以前的<简单的struts2框架(三)>,进一步优化 封装实体: 在action声明实体类:private Users user; 对实体类进行get,set方法 这样在方法里就不用对实体类进行一个个属性set值了,直接调用实体就可以了,免去了原来赋值的很多代码 代码: 1 private Users user; 2 private UserService userservice=new UserService(); 3 /** 4 * 用户注册 5 * @return 6 */ 7 pu

最简单的element分页组件二次封装

我感觉是最简单的, 因为我看别人的实现,要么带sync,要么传父组件函数. 而我这个,我觉得隔离得比较好. pagnation.vue(父组件传一个pageRequest过来,分页组件返回给父组件一个refreshPageRequest) ) <template> <div> <div class="toolbar" style="padding:10px;"> <el-pagination layout="tot

dom4j解析简单的xml文件 解析元素并封装到对象

1 package cn.itcast.xml; 2 3 import cn.itcast.domain.Book; 4 import org.dom4j.Document; 5 import org.dom4j.DocumentException; 6 import org.dom4j.Element; 7 import org.dom4j.Node; 8 import org.dom4j.io.SAXReader; 9 import org.junit.Before; 10 import o