登録スクリプトでは、PHPのpassword_hash()関数を使用してユーザーのパスワードを暗号化し、データベースに保存しています。 。ユーザーがログインしようとすると、password_verify() を使用して、入力されたパスワードとデータベース内のハッシュされたパスワードを比較します。ただし、パスワードが一致しません。これは、password_verify() 呼び出しに問題があることを示しています。
password_verify() は 2 つのパラメータを取ります:
プレーンテキストのパスワードとハッシュされたパスワードを比較し、一致する場合は true を返し、一致しない場合は false を返します。
ログイン スクリプトでは、プレーンテキストのパスワード ($pwd) とハッシュ化されたパスワード ($password) をpassword_verify():
if(($user_id == $p_num) && (password_verify($pwd, $password))){
に渡していますが、実行中に変数を検査するために var_dump() も使用しています。比較すると、値が変更される可能性があります。 var_dump() の出力は、プレーンテキストのパスワード ($pwd) が「1」に変更される一方、ハッシュされたパスワード ($password) はデータベースに保存されているものと同じままであることを示しています。
この問題を解決するには、コードから var_dump() 呼び出しを削除し、ログイン中にユーザーが入力したプレーンテキストのパスワードが $pwd に含まれていることを確認します。ログイン コードは次のようになります:
if(($user_id == $p_num) && (password_verify($pwd, $password))){
以上がPassword_Verify() 関数がハッシュ化されたパスワードを検証しないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。