Isu pencincangan kata laluan dalam PHP - password_verify() sentiasa mengembalikan palsu
P粉481035232
P粉481035232 2023-07-30 14:51:07
0
1
449
<p>Saya menghadapi masalah dengan pencincangan kata laluan dalam PHP. Saya menggunakan fungsi password_hash() untuk mencincang kata laluan pentadbir semasa mendaftar dan menyimpannya dalam pangkalan data. Walau bagaimanapun, apabila log masuk, apabila saya cuba mengesahkan kata laluan menggunakan password_verify(), ia sentiasa mengembalikan palsu, walaupun saya pasti kata laluan itu betul. </p><p>Berikut ialah ringkasan kod saya: </p><p><br /></p> <pre class="brush:php;toolbar:false;">$adminPassword = "test123"; $adminPasswordHash = password_hash($adminPassword, PASSWORD_BCRYPT); // ... Simpan $adminPasswordHash dalam pangkalan data ... // Semasa log masuk: $adminInputPassword = "test123"; $adminPasswordHashVERIFY = "$2y$10$o4qspRTirOSdyGtwHCxt6ee2i0BNChl3mEPazxVbmb534kw3ACHCm"; if (password_verify ($adminInputPassword, $adminPasswordHashVERIFY)) { echo "Kata laluan betul!"; } lain { echo "Kata laluan tidak betul!"; }</pre> <p>Saya memastikan $adminPassword dan $adminInputPassword mempunyai nilai yang sama, tetapi pengesahan sentiasa mengembalikan palsu. Saya juga cuba menggunakan fungsi password_hash() dan lulus PASSWORD_DEFAULT sebagai parameter dan bukannya PASSWORD_BCRYPT, tetapi hasilnya adalah sama. </p><p>Adakah saya kehilangan sesuatu semasa penjanaan cincang atau proses pengesahan? Sebarang bantuan atau pandangan tentang isu ini amat dihargai. Terima kasih! </p><p><br /></p>
P粉481035232
P粉481035232

membalas semua(1)
P粉099000044

Saya jumpa masalahnya! Masalahnya nampaknya disebabkan oleh penggunaan petikan berganda (") dalam pembolehubah $adminPasswordHashVERIFY. Apabila petikan berganda digunakan, PHP mentafsir rentetan dan menggantikan pembolehubah di dalamnya. Memandangkan tiada pembolehubah bernama $fReIQ, PHP merawatnya sebagai pembolehubah yang ditakrifkan, mengakibatkan nilai cincangan yang salah semasa mengesahkan

Untuk menyelesaikan isu ini, gunakan petikan tunggal (') di sekitar kata laluan yang dicincang dalam pembolehubah $adminPasswordHashVERIFY Ini memastikan bahawa kata laluan yang dicincang dianggap sebagai rentetan biasa . Daripada ditafsirkan oleh PHP

Sekarang jika anda mencuba kod berikut anda akan mendapat output "Kata laluan betul! ".


<?php
$adminPassword = "test123";
$adminPasswordHash = password_hash($adminPassword, PASSWORD_BCRYPT);

$adminInputPassword = "test123";
$adminPasswordHashVERIFY = 'y$o4qspRTirOSdyGtwHCxt6ee2i0BNChl3mEPazxVbmb534kw3ACHCm';

if (password_verify($adminInputPassword, $adminPasswordHashVERIFY)) {
    echo "Password is correct!";
} else {
    echo "Password is incorrect!";
}

?>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!