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

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

Patricia Arquette
發布: 2024-10-21 07:05:30
原創
376 人瀏覽過

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

來源:php
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板