对用户密码使用bcrypt


Using bcrypt for user passwords

我正在使用phpass的bcrypt功能在我的网站上散列密码。现在,它不会真的起作用。尝试与CheckPassword函数进行比较是行不通的。我对通过我用来解密哈希的每个函数产生的每个字符串进行了大量调试,得出的结论是bcrypt生成的哈希是非常随机的。因此,新生成的明文密码哈希永远不会与我数据库中的密码匹配。这是真的吗?如果是的话,我到底该怎么做?源代码相当简单。

// when creating user 
<db insert code>$hash->HashPassword($_POST['password']);
// when logging in
return $hash->CheckPassword($user->password, $_POST['password']);

编辑:问题是你的顺序错了,你需要密码,然后是存储的哈希。

$check = $hasher->CheckPassword($password, $stored_hash);

这很重要,正如我之前(下面)所说的,存储的哈希用于决定如何对密码进行哈希比较,因此您错误的参数顺序将导致失败。

以前的回答:

你不解密散列,而是通过以相同的方式对可比较数据进行散列来检查它。BCrypt散列包括散列、salt和轮次,因此检查这一点应该没有问题。

哈希永远不一样的原因是每次的盐都会不同。这是为了防止彩虹桌攻击。

据我所知,你的支票是正确的。问题一定出在别处。您确定$user->password实际上包含完整的哈希吗?BCrypt哈希为60个字符,因此请确保它不会被截断。