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