Passwort-Hashing-Problem in PHP – „password_verify()' gibt immer „false' zurück
P粉481035232
2023-07-30 14:51:07
<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>
我找到了问题所在!问题似乎是由于在$adminPasswordHashVERIFY变量中使用双引号(")引起的。当使用双引号时,PHP会解释字符串并替换其中的变量。由于没有名为$fReIQ的变量,PHP将其视为未定义的变量,导致验证时产生错误的哈希值。
要解决这个问题,在$adminPasswordHashVERIFY变量中使用单引号(')引起哈希密码。这样可以确保哈希密码被视为普通字符串,而不是由PHP解释。
现在,如果你尝试以下代码,你将得到输出"密码正确!"。