我正在尝试将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,如果这有任何区别的话。
答案 0 :(得分:1)
检查数据库中的密码大小是否大于50,那么它可能存在完整哈希的问题,这就是为什么总是假的