Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Apabila Membandingkan Hashes Kata Laluan dengan password_hash() dan password_verify(), Kata Laluan Mana Yang Perlu Diutamakan?

Apabila Membandingkan Hashes Kata Laluan dengan password_hash() dan password_verify(), Kata Laluan Mana Yang Perlu Diutamakan?

Patricia Arquette
Patricia Arquetteasal
2024-10-21 07:05:30271semak imbas

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

PHP password_hash(), password_verify() [duplikat]

Memahami Perbandingan Kata Laluan

Apabila menggunakan PHP password_hash() fungsi untuk mencincang kata laluan untuk simpanan dalam pangkalan data, adalah penting untuk memahami cara kata laluan yang dicincang disahkan semasa log masuk menggunakan password_verify().

Analisis Kod

Dalam kod anda, fungsi password_hash() mencincang kata laluan sebelum menyimpan ia dalam pangkalan data. Walau bagaimanapun, dalam skrip log masuk, anda secara langsung membandingkan kata laluan yang tidak dicincang yang dimasukkan oleh pengguna dengan kata laluan yang dicincang yang disimpan dalam pangkalan data menggunakan password_verify(). Perbandingan ini akan sentiasa gagal.

Penggunaan Betul

Cara yang betul untuk mengesahkan kata laluan menggunakan password_verify() adalah dengan menghantar kata laluan yang tidak dicincang yang dimasukkan oleh pengguna sebagai hujah pertama dan dicincang kata laluan yang disimpan dalam pangkalan data sebagai hujah kedua. Ini akan membenarkan password_verify() membandingkan dua kata laluan dengan betul.

Contoh

Berikut ialah versi ubah suai skrip log masuk anda dengan pengesahan kata laluan yang diperbetulkan:

<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>

Kesimpulan

Dengan menggunakan password_verify() dengan betul, anda boleh mengesahkan kata laluan pengguna dengan tepat semasa log masuk, memastikan keselamatan dan integriti sistem anda.

Atas ialah kandungan terperinci Apabila Membandingkan Hashes Kata Laluan dengan password_hash() dan password_verify(), Kata Laluan Mana Yang Perlu Diutamakan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn