ホームページ > バックエンド開発 > PHPチュートリアル > PHP パスワード検証がパスワード ハッシュの不一致により失敗するのはなぜですか?

PHP パスワード検証がパスワード ハッシュの不一致により失敗するのはなぜですか?

Linda Hamilton
リリース: 2024-10-21 07:04:02
オリジナル
677 人が閲覧しました

Why does PHP password verification fail with a password hash mismatch?

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 サイトの他の関連記事を参照してください。

ソース:php
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート