首頁  >  文章  >  後端開發  >  當比較密碼雜湊與password_hash()和password_verify()時,哪個密碼應該先出現?

當比較密碼雜湊與password_hash()和password_verify()時,哪個密碼應該先出現?

Patricia Arquette
Patricia Arquette原創
2024-10-21 07:05:30271瀏覽

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

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

理解密碼比較

使用PHP的password_hash()函數對密碼進行哈比希存儲時在資料庫中,有必要了解在登入過程中如何使用password_verify()驗證雜湊密碼。

程式碼分析

在您的程式碼中,password_hash()函數在儲存之前對密碼進行雜湊處理它在資料庫中。但是,在登入腳本中,您使用password_verify() 直接將使用者輸入的未雜湊密碼與儲存在資料庫中的雜湊密碼進行比較。這種比較總是會失敗。

正確用法

使用password_verify()驗證密碼的正確方法是傳遞使用者輸入的未雜湊密碼作為第一個參數和雜湊值密碼作為第二個參數儲存在資料庫中。這將允許password_verify()正確比較兩個密碼。

範例

這是登入腳本的修改版本,其中包含已修正的密碼驗證:

<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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn