2016-11-21 10 views
1

私はpassword_hashを使用してデータベースに挿入するためのパスワードを暗号化しています。それは作業が、私は常に暗号化された値が同じであっても、falseを返すされていることを確認するためにpassword_verifyを使用するときにここで password_verifyがtrueを返さない

が私のコードです(データベースの値がチェックされる):

if ($_POST['submit']) { 
    $dbh = new PDO("mysql:dbname=pass;host=localhost", "root", ""); 

    $select = $dbh->query("SELECT username, password FROM passwords WHERE username = " . $dbh->quote($_POST['username'])); 

    $fetch = $select->fetch(PDO::FETCH_ASSOC); 

    if (password_verify($fetch['password'], password_hash($_POST['password'], PASSWORD_BCRYPT))) { 
     echo 'Welcome! ' . $fetch['username'] . " your password is " . $fetch['password']; 
    } else { 
     echo "no"; 
    } 
} 

暗号化されたパスワードでのデータベースは、私が足りない

$ 2Y $ 10 $ dMXgvPo5j9.8gaSqgtxTSevlFCsJwdSn8vdLbqFirUQcFvzfk0or2

です何か?私はPHP(hash())で異なるハッシュ関数を使用しています。だから、なぜこれが動作しないのか混乱しています。挿入されたパスワードはデータベースで暗号化されていますpassword_hash($password, PASSWORD_BCRYPT)

助けていただければ幸いです。

+0

に変更し;' - [ドキュメント](HTTPを参照してください://php.net/manual/en/function.password-verify.php) - あなたの特定のコードでは、 'password_verify($ _ POST ['password']、$ fetch ['password'])となります。 ' – Qirel

+0

$ _POST ['pa ssword ']はハッシュされていません。 – user2101411

+0

マニュアルではstring_password、intのアルゴリズムでpassword_hash()と書いていますので、何を言っていますか? – user2101411

答えて

1

確認の際にパスワードを再ハッシュする必要はありません。

password_verify($_POST['password'], $fetch['password']); 

プラスあなたは間違った順序でそれらを持っていました。

+0

ありがとう、それを見ていない。 – user2101411

+0

回答としてマークして、すべていいです。 :) –

+0

は9分待たされましたが、時間がたつとそれをマークします。 – user2101411

1

password_verify()の構文はドキュメントから、ある

ブールpassword_verify(文字列$パスワード、文字列$ハッシュ)これが唯一の2つの引数があること、そしてあなたがしていることを意味

間違った順序。これに加えて、$password文字列はunhashed変数です。

単に構文は `password_verify($ハッシュ解除済み、ハッシュ化された$)です

password_verify($_POST['password'], $fetch['password']); 

リファレンス

+0

ありがとう、私はそれらを間違っていた、申し訳ありません。 – user2101411

+0

@ user2101411すでにコメントの中でこれを言及していましたが、私も答えを投稿したいと思っていました;-) *乾杯* – Qirel

+0

申し訳ありませんが、私は間違った順序でそれを見ていませんでした。でる :) – user2101411

関連する問題