Ich habe ein Passwort erstellt, wie so mit password_hash:password_verify() funktioniert nicht in php
$password = password_hash('password123', PASSWORD_DEFAULT);
Dies in einer MySQL-Datenbank in einer Spalte mit varchar gespeichert wird (60).
In meinem Login-Formular, die ich benutze:
if(password_verify($password, $foundUser->Password){ /*login*/ }
wo $password
die Klartext Eingabe von dem Login-Formular und $foundUser->Password
der Hash ist, die in der Datenbank gespeichert ist, aber die password_verify()
Funktion immer zurückkehrt falsch.
Ich habe meine Eingaben mit dem folgenden Code geprüft:
echo "Password: {$password} <br>"; echo "Found password: ".$foundUser->Password."<br>";
die Ausgänge:
Password: password123 Found password: $2y$10$8.ICQHCyCPzS.xygPO4cfuHsHZb6Kuxynn8/uUHOU1.7gY.UhSIXa
so dass ich ziemlich sicher bin ich in das richtige Passwort eingeben und bekommen der richtige Hash aus meiner Datenbank.
Ich habe die Links in this question für Antworten, aber habe es noch nicht funktioniert. Hat jemand irgendwelche Ideen, warum password_verify() false zurückgibt?
Aus dem Handbuch: "Es wird empfohlen, das Ergebnis in einer Datenbankspalte zu speichern, die mehr als 60 Zeichen (255 Zeichen wäre eine gute Wahl)." –
** Beachten Sie, dass sich 'PASSWORD_DEFAULT' im Laufe der Zeit ändert, wenn neue und stärkere Algorithmen zu PHP hinzugefügt werden. Aus diesem Grund kann sich die Länge des Ergebnisses aus der Verwendung dieser Kennung im Laufe der Zeit ändern. Daher wird empfohlen, das Ergebnis in einer Datenbankspalte zu speichern, die mehr als 60 Zeichen umfassen kann (255 Zeichen wären eine gute Wahl). ** - Nur für Anfänger ... Haben Sie überprüft, dass der von Ihrer Datenbank erhaltene Wert genau der ist Das gleiche wie das von 'password_hash' ...? – deceze
... obwohl 'PASSWORD_DEFAULT' zwar BCrypt verwendet, aber nicht, sollte es * immer eine Zeichenfolge mit 60 Zeichen sein. – CD001