Percanggahan Pengesahan Kata Laluan dalam Fungsi password_hash() dan password_verify() PHP
Dalam PHP, fungsi password_hash() dan password_verify() adalah biasa digunakan untuk mengendalikan dan mengesahkan kata laluan pengguna dengan selamat. Walau bagaimanapun, senario tertentu boleh membawa kepada percanggahan yang tidak dijangka dalam pemadanan kata laluan.
Pernyataan Masalah
Anda telah melihat percanggahan dalam pemadanan kata laluan apabila menggunakan password_hash() untuk menyulitkan kata laluan dan password_verify() untuk menyemaknya. Anda perasan bahawa hasil password_verify() tidak sejajar dengan kata laluan asal yang tidak disulitkan.
Memahami Percanggahan
Percanggahan berlaku disebabkan sifat algoritma pencincangan . Pencincangan melibatkan penukaran input teks biasa kepada output panjang tetap (dikenali sebagai cincang) yang unik dan tidak dapat diramalkan. Proses ini tidak boleh diterbalikkan, bermakna ia tidak boleh dilaksanakan secara pengiraan untuk mendapatkan semula input asal daripada cincang.
Apabila anda menggunakan password_hash() untuk menyulitkan kata laluan, ia menghasilkan cincang menggunakan algoritma bcrypt. Hash yang disulitkan ini kemudiannya disimpan dalam pangkalan data. Apabila pengguna cuba log masuk, kata laluan yang disediakan dicincang semula menggunakan password_hash() dan dibandingkan dengan cincang yang disimpan.
Menyelesaikan Percanggahan
Untuk memastikan kata laluan yang betul pengesahan, adalah penting untuk menggunakan algoritma dan konfigurasi yang sama yang digunakan semasa kata laluan pada mulanya dicincang. Berikut adalah langkah yang perlu anda lakukan:
<code class="php">$password = password_hash($pwd, PASSWORD_DEFAULT); // Using default bcrypt algorithm</code>
<code class="php">if (password_verify($pwd, $password)) { // Password matches }</code>
Dengan mengikuti langkah ini, anda boleh memastikan bahawa fungsi password_hash() dan password_verify() berfungsi dengan betul, menyediakan pengendalian dan pengesahan kata laluan yang boleh dipercayai dan selamat.
Atas ialah kandungan terperinci Mengapa Password_hash() dan password_verify() Berfungsi dalam PHP Menghasilkan Keputusan Berbeza?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!