关于Sql server数据 MD5加密

  最近在写一个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     }
View Code

第二步:对需要加密数据进行加密

   例如对字符串 string str =admin"  加密;

   调用方法:   Md5Helper.EncryptString(string  str)。得到返回字符串结果:21232f297a57a5a743894a0e4a801fc3,数据库存储结果: 21232f297a57a5a743894a0e4a801fc3

第三步:获取验证数据与加密数据进行对比

    对验证数据,调用 Md5Helper.EncryptString(string  str) 方法.,得到加密后数据 与数据库存储数据进行对比.但需要强调的是 ,验证数据需要调用两次加密方法。

string str2 =  Md5Helper.EncryptString( Md5Helper.EncryptString(str))

最初,我一直加密一次验证数据与数据库中加密数据进行对比,结果一直通不过。通过调试程序,发现:

从数据库取出已经加密的数据为:c3284d0f94606de1fd2af172aba15bf3 。这与“admin”数据第一次加密数据不同。因此,我对数据进行两次加密,得到以下结果:

第一次加密结果为:21232f297a57a5a743894a0e4a801fc3

第二次加密结果为:c3284d0f94606de1fd2af172aba15bf3

验证数据第二次加密结果与数据库获取加密数据一致。

 

在解决验证数据与数据库密码的对比之后,还发现一个问题。我采用的是sql server 数据库,数据库是别人建立好后给我。由于每个人设置不同,数据库编码不同,数据库编码格式不同,需要对MD5Helper类中的代码进行改造:

//将字符串转换为字节数组

byte[] byteOld = Encoding.GetEncoding("GBK").GetBytes(str);

对于这段代码需要根据数据库的编码格式进行改造,数据编码为utf-8的需要将GetEncoding 设置为utf-8.对于如何查询 数据库的编码格式,,可以参考这篇文章

http://www.cnblogs.com/print-true/p/5765031.html   ------- - ------查询Sql Server 编码格式.

 

转载于:https://www.cnblogs.com/hlx-blogs/p/7126304.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值