Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Mengapakah pengesahan kata laluan PHP gagal dengan ketidakpadanan cincang kata laluan?

Mengapakah pengesahan kata laluan PHP gagal dengan ketidakpadanan cincang kata laluan?

Linda Hamilton
Linda Hamiltonasal
2024-10-21 07:04:02574semak imbas

Why does PHP password verification fail with a password hash mismatch?

PHP password_hash(), password_verify()

Dalam skrip pendaftaran anda, anda mencincang kata laluan menggunakan password_hash() dan menyimpannya dengan betul pangkalan data. Walau bagaimanapun, apabila mengesahkan kata laluan semasa log masuk menggunakan password_verify(), anda menghadapi ketidakpadanan.

Coretan yang anda berikan menunjukkan bahawa kata laluan yang disimpan dalam pangkalan data telah dicincang (bermula dengan "$2y$10$") , manakala kata laluan yang dimasukkan oleh pengguna adalah dalam teks biasa (rentetan(1) "1"). Masalahnya terletak pada cara anda mendapatkan semula kata laluan daripada pangkalan data.

Dalam skrip log masuk, anda mendapatkan semula lajur kata laluan terus daripada hasil pangkalan data tanpa sebarang pemprosesan lanjut. Walau bagaimanapun, kata laluan yang disimpan dicincang dan ia perlu dinyahcincang sebelum ia boleh dibandingkan dengan kata laluan teks biasa yang dimasukkan oleh pengguna menggunakan password_verify().

Penyelesaian:

Dalam skrip log masuk, sebelum menggunakan password_verify(), anda perlu mendapatkan semula kata laluan cincang yang disimpan daripada pangkalan data dan kemudian nyahcincang menggunakan fungsi password_hash() dengan algoritma PASSWORD_DEFAULT. Berikut ialah kod yang diperbetulkan untuk skrip log masuk:

<code class="php">// ...same code as before...

$stored_hash = $row['password']; // Retrieve the stored hashed password
if (password_verify($pwd, $stored_hash)) {
    // ...same code as before...
}</code>

Pengubahsuaian ini memastikan kata laluan yang disimpan dalam pangkalan data tidak dicincang dengan betul sebelum dibandingkan dengan kata laluan teks biasa yang dimasukkan oleh pengguna, membenarkan password_verify() berfungsi dengan betul.

Atas ialah kandungan terperinci Mengapakah pengesahan kata laluan PHP gagal dengan ketidakpadanan cincang kata laluan?. 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