6

PHP のパスワード ハッシュ API を使用して、構築中のサイトのパスワードをハッシュして検証していますが、パスワードを検証しようとすると、常に false が返されます。

データベースに挿入される前にパスワードを設定する User クラスがあります。

public function set__password($passwd) {
    self::$password = password_hash($passwd, PASSWORD_BCRYPT, array('cost' => 12));
}

ユーザー名と電子メールが一意の場合、新しいユーザー行が挿入されます。データベースを確認すると、パスワードに有効な BCRYPT 文字列と思われるものがあります。

$2y$12$lTMEP0wevDEMX0bzStzoyOEzOTIAi3Hyhd3nYjGwzbI

パスワードを確認するために、次のスクリプトを実行します。

$username = $_POST['username'];
$password = $_POST['password'];

$DB = Database::getInstance();

// Get the stored password hash
$res = $DB->run__query('SELECT password FROM users WHERE username = "' . $username . '"');
$hash = $res[0]['password'];


// Do the passwords match?
if(password_verify($password, $hash)) {
    echo 'success';
} else {
    echo 'failed';
}

$hash上記の文字列に関係しますが、入力フィールドから取得した平文のパスワードがpassword_verify($password, $hash)where is であると呼び出すと、常に false の値が返されます。$password

4

2 に答える 2

17

与えられたハッシュ文字列の例には、60 文字ではなく 50 文字があります。データベース (CHAR(60)) と var_dump($hash) を再確認してください。

于 2014-07-14T14:55:58.700 に答える
-6

発生する可能性のあるその他の問題は、時間を稼ぐためにサーバーのコストを削減する場合です。

常に password_hash($pass, PASSWORD_DEFAULT) を使用するのが最善の方法です。

于 2019-07-09T21:25:56.907 に答える