新しいサイトで 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を実行していますが、違いがある場合は.