可能重复:
PHP 密码的安全哈希和盐
假设 salt 是随机的,高熵,长字符串,hash 是or sha512
,bcrypt
为什么
认为hash(password + perUserSalt)
不够?
这个问题起源于阅读 PHP 的新密码哈希 API RFC之后,作者在其中指出
哈希(密码+盐)=这不好
可能重复:
PHP 密码的安全哈希和盐
假设 salt 是随机的,高熵,长字符串,hash 是or sha512
,bcrypt
为什么
认为hash(password + perUserSalt)
不够?
这个问题起源于阅读 PHP 的新密码哈希 API RFC之后,作者在其中指出
哈希(密码+盐)=这不好
许多年前,通常使用这样的哈希密码来保存在数据库中,例如:
$hashedPassword = MD5($password . $salt);
硬件变得更快,已知的快速哈希函数(如 MD5、SHA-1 以及 SHA-512)可能会被暴力破解太快。如今 [2012] 可以使用通用硬件计算大约8 Giga MD5 值,以暴力破解包含 500'000 个单词的整个英语词典,您只需要几分之一毫秒!
这就是为什么发明了 BCrypt 和 PBKDF2 等密钥派生函数的原因。它们有一个成本参数并多次重复散列(成本因素决定了迭代次数)。每次迭代都将使用原始盐来计算新的哈希值,这就是为什么您必须将盐单独传递给函数并且之前不能将其连接起来:
$hashedPassword = Bcrypt($password, $salt);
链接的文章要么想解释现在单个哈希计算是不够的,要么是想表明在将盐传递给哈希函数之前不能将盐与密码连接起来。