Heim  >  Fragen und Antworten  >  Hauptteil

Passwort-Hashing-Problem in PHP – „password_verify()“ gibt immer „false“ zurück

<p>Ich habe ein Problem mit dem Passwort-Hashing in PHP. Ich verwende die Funktion „password_hash()“, um das Admin-Passwort bei der Registrierung zu hashen und in der Datenbank zu speichern. Wenn ich mich jedoch anmelde und versuche, das Passwort mit „password_verify()“ zu überprüfen, wird immer „false“ zurückgegeben, obwohl ich sicher bin, dass das Passwort korrekt ist. </p><p>Hier ist eine Zusammenfassung meines Codes: </p><p><br /></p> <pre class="brush:php;toolbar:false;">$adminPassword = "test123"; $adminPasswordHash = passwort_hash($adminPassword, PASSWORD_BCRYPT); // ... $adminPasswordHash in der Datenbank speichern ... // Während der Anmeldung: $adminInputPassword = "test123"; $adminPasswordHashVERIFY = "$2y$10$o4qspRTirOSdyGtwHCxt6ee2i0BNChl3mEPazxVbmb534kw3ACHCm"; if (password_verify($adminInputPassword, $adminPasswordHashVERIFY)) { echo „Passwort ist korrekt!“; } anders { echo „Passwort ist falsch!“; }</pre> <p>Ich habe sichergestellt, dass $adminPassword und $adminInputPassword denselben Wert haben, aber die Validierung gibt immer false zurück. Ich habe auch versucht, die Funktion „password_hash()“ zu verwenden und PASSWORD_DEFAULT als Parameter anstelle von PASSWORD_BCRYPT zu übergeben, aber das Ergebnis war das gleiche. </p><p>Übersehe ich etwas während der Hash-Generierung oder des Verifizierungsprozesses? Jede Hilfe oder jeder Einblick in dieses Problem wäre sehr dankbar. Danke! </p><p><br /></p>
P粉481035232P粉481035232471 Tage vor488

Antworte allen(1)Ich werde antworten

  • P粉099000044

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

    我找到了问题所在!问题似乎是由于在$adminPasswordHashVERIFY变量中使用双引号(")引起的。当使用双引号时,PHP会解释字符串并替换其中的变量。由于没有名为$fReIQ的变量,PHP将其视为未定义的变量,导致验证时产生错误的哈希值。

    要解决这个问题,在$adminPasswordHashVERIFY变量中使用单引号(')引起哈希密码。这样可以确保哈希密码被视为普通字符串,而不是由PHP解释。

    现在,如果你尝试以下代码,你将得到输出"密码正确!"。


    <?php
    $adminPassword = "test123";
    $adminPasswordHash = password_hash($adminPassword, PASSWORD_BCRYPT);
    
    $adminInputPassword = "test123";
    $adminPasswordHashVERIFY = '$2y$10$o4qspRTirOSdyGtwHCxt6ee2i0BNChl3mEPazxVbmb534kw3ACHCm';
    
    if (password_verify($adminInputPassword, $adminPasswordHashVERIFY)) {
        echo "Password is correct!";
    } else {
        echo "Password is incorrect!";
    }
    
    ?>

    Antwort
    0
  • StornierenAntwort