我正在使用phpass的bcrypt功能在我的网站上哈希密码。
现在,它不会真正起作用。试图与CheckPassword
函数进行比较是行不通的。我通过用于解密哈希的每个函数对每个字符串进行了大量调试,并得出结论:bcrypt生成的哈希值非常随机。因此,新生成的明文密码的哈希值永远不会与我的数据库中的哈希值匹配。真的吗?如果是这样,我该怎么做呢?源代码非常简单。
// when creating user
<db insert code>$hash->HashPassword($_POST['password']);
// when logging in
return $hash->CheckPassword($user->password, $_POST['password']);
答案 0 :(得分:1)
编辑: 问题是您的订单有错,需要密码,然后是存储的哈希。
$check = $hasher->CheckPassword($password, $stored_hash);
这很重要,正如我之前(下文)所说,存储的哈希用于决定如何对密码进行哈希比较,因此错误的参数顺序将导致失败。
之前的回答:
您不会对哈希进行解密,您可以通过以相同方式对可比数据进行哈希来检查哈希。 BCrypt哈希包括哈希,盐和轮数,因此检查时应该没有问题。
哈希从不相同的原因是盐每次都会有所不同。这是为了防止彩虹表攻击。
据我所知,你的支票是合理的。问题必须在其他地方。你确定$user->password
实际上包含哈希值吗? BCrypt哈希值为60个字符,因此请确保它不会被截断。