最近在写一个web项目时,需要在数据库中将用户密码等一类信息进行加密处理。数据加密算法有许多 ,各有各的优缺点;在 http://www.cnblogs.com/yangywyangyw/archive/2012/07/31/2620861.html 一文中对各种加密算法进行了介绍。之前,有对数据进行加密,由于许久没写,在加密处理上出了一些问题。找了一些博客,但没能很好解决问题。 本次项目的加密,采用的是MD5加密,MD5是一个安全的散列算法,输入两个不同的明文不会得到相同的输出值,根据输出值,不能得到原始的明文,即其过程不可逆;所以要解密MD5没有现成的算法,只能用穷举法,把可能出现的明文,用MD5算法散列之后,把得到的散列值和原始的数据形成一个一对一的映射表,通过比在表中比破解密码的MD5算法散列值,通过匹配从映射表中找出破解密码所对应的原始明文。
第一步: 创建MD5Help类
1 public static string EncryptString(string str) 2 { 3 //utf8 x2 4 //创建对象的方法,构造方法,静态方法 5 MD5 md5 = MD5.Create(); 6 //调用MD5加密方法 7 //将字符串转换为字节数组 8 byte[] byteOld = Encoding.GetEncoding("GBK").GetBytes(str); 9 byte[] byteNew = md5.ComputeHash(byteOld); 10 //将加密结果进行 转换字符串 11 StringBuilder sb = new StringBuilder(); 12 foreach (byte b in byteNew) 13 { 14 //将字符转换成16进制表示的字符串,而是占用从两头来 15 sb.Append(b.ToString("x2")); 16 } 17 //返回加密字符串 18 return sb.ToString(); 19 20 21 } 22 }