加盐密码哈希:如何正确使用
<p style="border:0px; margin-top:0px; margin-bottom:20px; padding-top:0px; padding-bottom:0px; font-size:15px; color:rgb(46,46,46); font-family:'Microsoft YaHei',宋体,'Myriad Pro',Lato,'Helvetica Neue',Helvetica,Arial,sans-serif"> <p style="border:0px; margin-top:0px; margin-bottom:20px; padding-top:0px; padding-bottom:0px; font-size:15px; color:rgb(46,sans-serif"> 在对密码进行哈希加密的问题上,人们有许多争论和误解,这大概是由于网络上广泛的误传吧。密码哈希是一件非常简单的事情,但是依然有很多人理解错误了。本文阐述的并不是进行密码哈希唯一正确的方法,但是会告诉你为什么这样是正确的。 <div style="border:0px; margin:0px; padding:0px; font-size:15px; color:rgb(46,sans-serif; background-color:rgb(255,204,204)"> <p style="border:0px; margin-top:0px; margin-bottom:20px; padding-top:0px; padding-bottom:0px"> <span style="border:0px; margin:0px; padding:0px">郑重警告:如果你在试图编写自己的密码哈希代码,<span style="border:0px; margin:0px; padding:0px">赶紧停下来!那太容易搞砸了。即使你受过密码学的高等教育,也应该听从这个警告。这是对所有人说的:<span style="border:0px; margin:0px; padding:0px">不要自己写加密函数!安全存储密码的难题现在已经被解决了,请使用<a target="_blank" title="http://www.openwall.com/phpass/" href="http://www.openwall.com/phpass/" rel="nofollow" style="border:0px; margin:0px; padding:0px; text-decoration:none; color:rgb(0,153,204)">phpass或者本文给出的一些源代码。
才能用于保护密码,例如SHA256,SHA512,RipeMD和WHIRLPOOL。
和。
密码字典中的每个密码,然后把哈希值和对应的密码储存到一个用于快速查询的数据结构中。一个良好的查表实现可以每秒进行数百次哈希查询,即使表中储存了几十亿个哈希值。
:短盐值和盐值重复
:两次哈希和组合哈希函数
来生成。CSPRNG和普通的随机数生成器有很大不同,如C语言中的rand()函数。物如其名,CSPRNG专门被设计成用于加密,它能提供高度随机和无法预测的随机数。我们显然不希望自己的盐值被猜测到,所以一定要使用CSPRNG。下面的表格列出了当前主流编程语言中的CSPRNG方法:
HTTPS(SSL/TLS)。如果浏览器和服务器之间的连接是不安全的,那么中间人攻击可以修改JavaScript代码,删除加密函数,从而获取用户密码。
的技术。
,只有知道这个密钥的人才能校验密码。有两种办法可以实现:将哈希值加密,比如使用AES算法;将密钥包含到哈希字符串中,比如使用密钥哈希算法。
使用: 使用:
的令牌,它直接关联到用户的账户。然后将这个令牌混入一个重置密码的链接中,发送到用户的电子邮箱。最后当用户点击这个包含有效令牌的链接时,提示他们可以设置新的密码。要确保这个令牌只对一个账户有效,以防攻击者从邮箱获取到令牌后,用来重置其他用户的密码。
|