2011-07-04 53 views
0

腌制密码时,哪种方法是正确的(或最有效的方法)?腌制 - 步骤顺序

A.首先散列密码,然后散列密码的哈希值,像这样的盐:

$password = "passwd"; 

$salt = "s0merndslt"; 

$password = sha1($password); 

$salty = sha1($password.$salt); 

B.以密码和salt和hash在一起就像这样:

$password = "passwd"; 

$salt = "s0merndslt"; 

$salty = sha1($password.$salt); 

我很抱歉,如果以前有人问过这个问题,但是我找不到SO上这个特定部分盐析的答案。

回答

2

实际上,无论哪种情况。

但是,您的示例#1提供了一个时间折衷,它将(稍微)减慢暴力破解密码查找器的速度。

随着GPU的出现,简单地腌制密码是不够的。一个由GPU支持的强力密码工具,当提供一组密码来查找时,可以在几分钟(甚至几秒)内完成短密码。

这就是为什么工具或算法(如bcrypt或PBKDF#2)存在的原因:他们多次迭代哈希操作以产生大量工作负载,这使得在商品硬件上从哈希“不可行”查找密码。

如果有疑问,请不要执行您自己的密码哈希解决方案!使用bcrypt或PBKDF#2。

+0

谢谢。 PHP中有某个库是否推荐使用这些算法?就像http://www.openwall.com/phpass/我做了一个快速搜索bcrypt和PBKDF2,并没有出现官方的PHP文档。我假设这些不是本地支持的PHP ... – Aaron

+0

@Aaron:有几个版本的PBKDF#2在这里,这里是一个链接到维基百科:http://www.itnewb.com/v/Encrypting -Passwords-with-PHP-for-Storage-Using-the-RSA-PBKDF2-Standard请注意,您仍然需要将迭代(至少> 5000)和salt作为密码的一部分存储在数据库中(或分开存储专栏,由你决定) –