检查密码时PHPass无法正常工作

时间:2012-11-28 16:30:43

标签: php bcrypt phpass

我正在尝试将PHPass用于新网站。我生成了这样的哈希并将其存储在数据库中:

$hasher = new \Hautelook\Phpass\PasswordHash(8, true);
$password = $hasher->HashPassword('secretpassword');
// I store $password in the DB for the user

在登录页面上,我找到了用户并使用CheckPassword查看它们是否相同:

function authUser($username, $password, $hasher, $db) {
    $sql = "SELECT * FROM users WHERE username = :username";
    $stmt = $db->prepare($sql);
    $stmt->bindValue("username", $username);
    $stmt->execute();
    $user = $stmt->fetch();

    $check = $hasher->CheckPassword($password, $user['password']);
    if($check) {
        return $user;
    } else {
        return null;
    }
}

$user['password']确实包含我存储的正确哈希,所以我知道这是正确的。 $password是从表单传入的明文密码。 CheckPassword()总是返回false,但是从今天早上我仔细阅读过的所有教程看起来都是正确的,应该可以正常工作。 $hasher以相同的方式创建,其中8为成本且可移植设置为true。

我无法弄清楚为什么CheckPassword总是返回false。我是否需要为CheckPassword初始化哈希值,而不是在哈希值时对其进行初始化?我错过了一些简单的东西吗?

我在CentOS 6.3上运行PHP 5.3.19,如果这有任何区别的话。

1 个答案:

答案 0 :(得分:1)

检查数据库中的密码大小是否大于50,那么它可能存在完整哈希的问题,这就是为什么总是假的