什么更好?Password_hash vs. SHA256 vs. SHA1 vs. md5

14

如何更好地使用salt来存储密码?

MD5:

$hash = md5($password . $salt);

密码哈希值:

$hash = password_hash($password, PASSWORD_DEFAULT, $salt);

SHA1:

$result = sha1($salt.$string);

1
我投票关闭此问题,因为它涉及分析安全属性,与编程问题无关。 - Duncan Jones
请查看https://dev59.com/F3E95IYBdhLWcg3wm_Mu。 - bog500
你说得对。这确实涉及到安全问题。就我所看到的,这里没有编程。 - Noah Gary
2个回答

31

你应该绝对使用password_hash()函数而不提供自己的盐:

$hash = password_hash($password, PASSWORD_DEFAULT);

这个函数会自动生成一个安全的盐值。其他算法处理密码哈希得太快,因此可以太容易地遭受暴力破解攻击(大约每秒 8 Giga MD5)。


1
当您需要进行身份验证但不知道已生成的盐时怎么办?我是在学习,而不是在纠正。 - Noah Gary
10
没关系……这里使用了 password_verify() 函数。我将我的评论留给未来有同样问题的用户。 - Noah Gary

3

当您需要存储大量密码时,盐非常有用,否则它们就不怎么有用,因为它们以明文形式存储。如果攻击者设法获取到您的哈希密码,则假定他们可以得到您的盐。

使用SHA-256是因为它是一个密码学上强大的哈希函数,并使用盐。但更重要的是,只需使用强密码结合强哈希算法。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接