2017-02-01 3 views
1

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?

+1

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)." –

+1

** 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

+0

... obwohl 'PASSWORD_DEFAULT' zwar BCrypt verwendet, aber nicht, sollte es * immer eine Zeichenfolge mit 60 Zeichen sein. – CD001

Antwort

0

Setzen Sie den Wert der Datenbankspalte auf mehr als 60, da verschlüsselte Passwort-Zeichen mehr als 100 sein können. Und $ password = password_hash ('password123', PASSWORD_DEFAULT); Diese Funktion gibt ein verschlüsseltes Passwort zurück, das sich jedes Mal ändern kann.

0

Im php-Handbuch gibt es eine Vorsichtsmaßnahme für die Funktion password_hash(): Die Verwendung des PASSWORD_BCRYPT als Algorithmus führt dazu, dass der Parameter password auf eine maximale Länge von 72 Zeichen gekürzt wird. Bitte lesen Sie diese http://php.net/manual/en/function.password-hash.php

vielleicht müssen Sie diese mysql-Spalte von varchar (60) zu varchar (73) oder größer ändern. Sie können auch Text eingeben.

+0

Die Funktion password_hash() schneidet das Passwort auf 72 Zeichen ab, funktioniert aber ohne Probleme. Der Hashwert für einen BCrypt-Hash ("$ 2y $ 10 $ ...") beträgt weiterhin 60 Zeichen. – martinstoeckli

0

Gelöst meine eigenen Probleme Jungs. Wie in den @martinstieckli und @Narf Vorschlägen, änderte ich die Art, wie ich es debuggte und stellte fest, dass das Problem nicht mit password_verify(), sondern mit der Art und Weise, wie ich die Ausgabe behandelte, war. Entschuldigung für die herumlaufen und danke für Ihre Hilfe.

Verwandte Themen