0

我正在尝试将 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,如果这有什么不同的话。

4

1 回答 1

1

检查数据库中的密码大小,如果它<50,那么它可能在存储完整哈希时有问题,这就是为什么总是错误的

于 2013-01-27T05:43:06.197 回答