Rumah  >  Soal Jawab  >  teks badan

Isu pencincangan kata laluan dalam PHP - password_verify() sentiasa mengembalikan palsu

<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粉481035232P粉481035232468 hari yang lalu485

membalas semua(1)saya akan balas

  • P粉099000044

    P粉0990000442023-07-31 13:54:06

    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!";
    }
    
    ?>

    balas
    0
  • Batalbalas