ホームページ > バックエンド開発 > PHPチュートリアル > パスワードハッシュをpassword_hash()とpassword_verify()で比較する場合、どちらのパスワードを先にすべきでしょうか?

パスワードハッシュをpassword_hash()とpassword_verify()で比較する場合、どちらのパスワードを先にすべきでしょうか?

Patricia Arquette
リリース: 2024-10-21 07:05:30
オリジナル
379 人が閲覧しました

When Comparing Password Hashes with password_hash() and password_verify(), Which Password Should Come First?

PHP password_hash()、password_verify() [重複]

パスワード比較について

PHP の passwd_hash() 関数を使用してパスワードをハッシュして保存する場合データベースでは、password_verify() を使用してログイン中にハッシュされたパスワードがどのように検証されるかを理解することが重要です。

コード分析

コードでは、password_hash() 関数がパスワードを保存する前にハッシュします。それはデータベースにあります。ただし、ログイン スクリプトでは、ユーザーが入力したハッシュ化されていないパスワードと、password_verify() を使用してデータベースに保存されているハッシュ化されたパスワードを直接比較します。この比較は常に失敗します。

正しい使用法

password_verify() を使用してパスワードを検証する正しい方法は、ユーザーが入力したハッシュ化されていないパスワードを最初の引数として渡し、ハッシュ化されたパスワードを渡すことです。 2 番目の引数としてデータベースに保存されているパスワード。これにより、password_verify() で 2 つのパスワードを正しく比較できるようになります。

パスワード検証が修正されたログイン スクリプトの修正バージョンは次のとおりです。

<code class="php">if($_SERVER["REQUEST_METHOD"] == "POST"){
    $p_num = $_POST["username"];
    $pwd = $_POST["password"];

    $query = "SELECT * FROM `$user_table` WHERE `user_id` = '$p_num'";
    $result = mysqli_query($connect, $query);
    while($row = mysqli_fetch_assoc($result)){
        $user_id = $row['user_id'];
        $first_name = $row['first_name'];
        $last_name = $row['last_name'];
        $user_name = $first_name ." " .$last_name;
        $password = $row['password'];
        $image = $row['image'];
        $email = $row['email'];
        $program = $row['program'];
        $role = $row['role'];
        $status = $row['logged_in'];
        $registered = $row['registered'];

        // Verify the password using password_verify()
        if(($user_id == $p_num) && (password_verify($pwd, $password))){
            $_SESSION["id"] = $user_id;
            $_SESSION["user"] = $user_name;
            $_SESSION["program"] = $program;
            $_SESSION["pass"] = $password;
            $_SESSION["image"] = $image;
            $_SESSION["email"] = $email;
            $_SESSION["role"] = $role;
            $_SESSION["status"] = $status;
            $_SESSION["registered"] = $registered;
            $loggedin = "UPDATE `$user_table` SET `logged_in` = 1 WHERE `user_id` = '$user_id'";
        }
    var_dump($pwd);
    var_dump($password);
}
}</code>
ログイン後にコピー

結論

password_verify() を正しく使用すると、ログイン中にユーザーのパスワードを正確に検証でき、システムのセキュリティと整合性が確保されます。

以上がパスワードハッシュをpassword_hash()とpassword_verify()で比較する場合、どちらのパスワードを先にすべきでしょうか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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