検索

ホームページ  >  に質問  >  本文

PHP のパスワード ハッシュの問題 -password_verify() が常に false を返す

<p>PHP でのパスワードのハッシュ化に問題があります。登録時に管理者パスワードをハッシュ化し、データベースに保存するには、password_hash() 関数を使用します。ただし、ログイン時に、password_verify() を使用してパスワードを検証しようとすると、パスワードが正しいとわかっていても、常に false が返されます。 </p><p>コードの概要は次のとおりです。</p><p><br /></p> <pre class="brush:php;toolbar:false;">$adminPassword = "test123"; $adminPasswordHash = パスワード_ハッシュ($adminPassword, PASSWORD_BCRYPT); // ... $adminPasswordHash をデータベースに保存します ... // ログイン中: $adminInputPassword = "test123"; $adminPasswordHashVERIFY = "$2y$10$o4qspRTirOSdyGtwHCxt6ee2i0BNChl3mEPazxVbmb534kw3ACHCm"; if (password_verify($adminInputPassword, $adminPasswordHashVERIFY)) { echo "パスワードは正しいです!"; } それ以外 { echo "パスワードが間違っています!"; }</pre> <p>$adminPassword と $adminInputPassword が同じ値であることを確認しましたが、検証では常に false が返されます。また、password_hash() 関数を使用して、PASSWORD_BCRYPT の代わりに PASSWORD_DEFAULT をパラメータとして渡してみましたが、結果は同じでした。 </p><p>ハッシュの生成または検証プロセス中に何かが欠けているのでしょうか?この問題に関するご支援や洞察をいただければ幸いです。ありがとう! </p>


P粉481035232P粉481035232486日前502

全員に返信(1)返信します

  • P粉099000044

    P粉0990000442023-07-31 13:54:06

    問題が見つかりました!この問題は、$adminPasswordHashVERIFY 変数での二重引用符 (") の使用が原因であるようです。二重引用符が使用されると、PHP は文字列を解釈し、その中の変数を置き換えます。$fReIQ という名前の変数がないため、PHP はそれを処理します。変数が定義されていないため、検証中に不正なハッシュ値が生成されます。

    この問題を解決するには、$adminPasswordHashVERIFY 変数のハッシュ化されたパスワードを一重引用符 (') で囲みます。これにより、ハッシュ化されたパスワードが確実にPHP によって解釈されるのではなく、通常の文字列として扱われます。

    ここで、次のコードを試すと、「パスワードが正しいです!」という出力が得られます。 「.


    リーリー

    返事
    0
  • キャンセル返事