ホームページ  >  記事  >  バックエンド開発  >  Password_Verify() 関数がハッシュ化されたパスワードを検証しないのはなぜですか?

Password_Verify() 関数がハッシュ化されたパスワードを検証しないのはなぜですか?

Patricia Arquette
Patricia Arquetteオリジナル
2024-10-21 07:07:301001ブラウズ

Why is the Password_Verify() Function Not Verifying Hashed Passwords?

PHP のpassword_hash()、password_verify()

登録スクリプトでは、PHPのpassword_hash()関数を使用してユーザーのパスワードを暗号化し、データベースに保存しています。 。ユーザーがログインしようとすると、password_verify() を使用して、入力されたパスワードとデータベース内のハッシュされたパスワードを比較します。ただし、パスワードが一致しません。これは、password_verify() 呼び出しに問題があることを示しています。

password_verify() 使用法

password_verify() は 2 つのパラメータを取ります:

  • $password: ログイン中にユーザーが入力したプレーンテキストのパスワード。
  • $hash: データベースに保存されているハッシュされたパスワード。

プレーンテキストのパスワードとハッシュされたパスワードを比較し、一致する場合は 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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。