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 未満の場合は、完全なハッシュの保存に問題がある可能性があります。そのため、常に false になります。

于 2013-01-27T05:43:06.197 に答える