PHP password_hash()、password_verify()
登録スクリプトでは、password_hash() を使用してパスワードを正しくハッシュし、それを次の場所に保存します。データベース。ただし、ログイン時にpassword_verify()を使用してパスワードを検証すると、不一致が発生します。
指定したスニペットは、データベースに保存されているパスワードがハッシュ化されていることを示しています(「$2y$10$」で始まる)。 、ユーザーが入力したパスワードはプレーンテキスト (string(1) "1") です。問題は、データベースからパスワードを取得する方法にあります。
ログイン スクリプトでは、それ以上の処理を行わずに、データベースの結果からパスワード列を直接取得します。ただし、保存されたパスワードはハッシュ化されており、password_verify() を使用してユーザーが入力したプレーン テキストのパスワードと比較するには、ハッシュを解除する必要があります。
解決策:
ログイン スクリプトでは、password_verify() を使用する前に、保存されているハッシュ化されたパスワードをデータベースから取得し、PASSWORD_DEFAULT アルゴリズムを使用して、password_hash() 関数を使用してハッシュ化を解除する必要があります。ログイン スクリプトの修正されたコードは次のとおりです:
<code class="php">// ...same code as before... $stored_hash = $row['password']; // Retrieve the stored hashed password if (password_verify($pwd, $stored_hash)) { // ...same code as before... }</code>
この変更により、データベースに保存されているパスワードが、ユーザーが入力したプレーン テキストのパスワードと比較される前に適切にハッシュ化され、password_verify() が機能できるようになります。正しく。
以上がPHP パスワード検証がパスワード ハッシュの不一致により失敗するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。