2016-12-28 1 views
0

Großes Problem mit password_verify.Password_verify überprüft nicht richtig

In meinem db gibt es eine Spalte:

password: $2y$10$1k72g4qYgd4t5koC5hj8sOit3545GfO5EhaIwVRfIiA2/eC3Hnu5e ('b') 

Wenn ich um zu überprüfen, ob dieses Passwort gleich ist der Buchstabe a es meinen völlig 2 verschiedener codes.My Code gegeben:

$hash = password_hash('b', PASSWORD_DEFAULT); 
$pass = getPassword($email); 
echo $hash . ", " $pass; 

und es gibt mir:

$2y$10$oJbeQqGSee.pLcBNxqRzUecoCGc9fin7IF.evDVanN1pjmtIINSD2, 
$2y$10$1k72g4qYgd4t5koC5hj8sOit3545GfO5EhaIwVRfIiA2/eC3Hnu5e 

Warum es anders sind?

Antwort

1

sollten Sie password_hash() verwenden, bevor sie in Ihre Speicher Einfügen und dann, wenn Sie überprüfen Sie password_verify()

$pass = getPassword($email); 
$verify = password_verify('b', $pass); 

if ($verify) { 
    // passwords match 
} 
else { 
    // passwords do not match 
} 

See verwenden sollten: password-verify für weitere Informationen

2

Es ist, weil, wenn sie nicht vom Benutzer angegeben, password_hash wird erzeugen Sie eine zufällige Salz. Salt ist eine Zeichenfolge, die vor dem Hashing an ein Kennwort angehängt wird. Da die Salze zufällig sind, haben zwei Benutzer mit demselben Passwort immer noch andere Hashes in der Datenbank.

gute Zusammenfassung des Themas kann on the wikipedia

Um zu überprüfen, festzustellen, dass das Passwort korrekt ist, sollten Sie nicht manuell Hashes vergleichen, die bei jeder Verwendung von password_hash verschieden sein können wegen der zufälligen Salz, aber Verwenden Sie stattdessen die Funktion password_verify

Verwandte Themen