不知道为什么,但我想我完全不明白这是如何运作的。
我找到了一个示例脚本:
echo crypt('abc123', '$2a$04$saltsaltsaltsaltsaltxx');
它声称提供输出:
$2a$04$saltsaltsaltsaltsaltxuK2.MS4sJd6ZjnuS0fp2eenjndo.g4hS
但是当我这样做时,我得到的代码相同:
$2pGiQ0v1IyNY
作为一个输出......到目前为止我没有真正向我解释任何事情,或者为什么我得到一个不同的输出到我的例子?
我正在尝试获取销售+哈希密码,并将其存储在每个用户的用户表中,但我不会遵循如何:
a)为每个用户生成一个随机盐
b)从中获取salt和哈希密码来存储它?
c)然后如何检查它,例如登录页面
答案 0 :(得分:2)
来自PHP文档:
Blowfish用盐进行散列如下:“$ 2a $”,两位数的成本参数“$”,以及字母“./0-9A-Za-z”的22位数字。在salt中使用此范围之外的字符将导致crypt()返回零长度字符串。两位数的成本参数是基于Blowfish的哈希算法的迭代计数的基数2对数,并且必须在04-31范围内,超出此范围的值将导致crypt()失败。
您无需从散列密码中分割出盐。您存储整个字符串(“$ 2a $ 04 $ saltsaltsaltsaltsaltxuK2.MS4sJd6ZjnuS0fp2eenjndo.g4hS”),当您想要验证提供的密码是否与您的哈希匹配时,您可以
if (crypt($form_password, $stored_hash) == $stored_hash) {
// password is correct
}