概述
我们知道,如果直接对密码进行散列,那么黑客(统称那些有能力窃取用户数据并企图得到用户密码的人)可以对一个已知密码进行散列,然后通过对比散列值得到某用户的密码。换句话说,虽然黑客不能取得某特定用户的密码,但他可以知道使用特定密码的用户有哪些。
加Salt可以一定程度上解决这一问题。所谓加Salt,就是加点“佐料”。其基本想法是这样的——当用户首次提供密码时(通常是注册时),由系统自动往这个密码里撒一些“佐料”,然后再散列。而当用户登录时,系统为用户提供的代码撒上同样的“佐料”,然后散列,再比较散列值,已确定密码是否正确。
这里的“佐料”被称作“Salt值”,这个值是由系统随机生成的,并且只有系统知道。这样,即便两个用户使用了同一个密码,由于系统为它们生成的salt值不同,他们的散列值也是不同的。即便黑客可以通过自己的密码和自己生成的散列值来找具有特定密码的用户,但这个几率太小了(密码和salt值都得和黑客使用的一样才行)。
下面详细介绍一下加Salt散列的过程。介绍之前先强调一点,前面说过,验证密码时要使用和最初散列密码时使用“相同的”佐料。所以Salt值是要存放在数据库里的。
用户注册时:
1)用户提供密码(以及其他用户信息);
2)系统为用户生成Salt值;
3)系统将Salt值和用户密码连接到一起;
4)对连接后的值进行散列,得到Hash值;
5)将Hash值和Salt值分别放到数据库中。
登录时:
1)用户提供用户名和密码;
2)系统通过用户名找到与之对应的Hash值和Salt值;
3)系统将Salt值和用户提供的密码连接到一起;
4)对连接后的值进行散列,得到Hash'(注意有个“撇”);
5)比较Hash和Hash'是否相等,相等则表示密码正确,否则表示密码错误。
hash加密的坏处是会被反查出来。
密码存储形式有三种:明文、加密、哈希值。
明文肯定是不可取的;加密的优点是可以还原密码,缺点是不如哈希值安全。所以我们一般用哈希值存储密码,常用的计算哈希值的方法是 MD5 和 SHA-1,本文以 MD5 为例。
为哈希值增加一个随机盐可以增加密码的安全性。
增加简单密码的安全性
假设用户的密码是 1,那么 MD5 值就是:c4ca4238a0b923820dcc509a6f75849b。
这个在网上很容易被反查出来,比如这两个网址:http://www.xmd5.org/index_cn.htm、http://md5.rednoize.com/。
但如果加上随机盐就不同了,假如我们的随机盐是 6 个随机字符,就比如是:xids#3,存储的就是 MD5("xids#3" + "1"),随机盐被明文存储在另一个字段时,到时候判断密码时再把密码和随机盐混合起来计算。而要反查 MD5("xids#3" + "1") 就不是件容易的事了。
让相同的密码具有不同的结果
由于有随机盐参与了 MD5 运算,所以相同的密码,由于随机盐不同,哈希值就不同了。
最后
以上就是迅速睫毛膏为你收集整理的随机salt二次加密及hash加密漫谈的全部内容,希望文章能够帮你解决随机salt二次加密及hash加密漫谈所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复