2013-06-01 3 views
6

Die Funktion password_verify() in der neuen PHP-Passwort-API prüft, ob das Passwort dem Hash entspricht. Der Hash wird generiert durch password_hash(), das standardmäßig eine zufällige Salz und eine cost = 10 verwendet.Wie kann password_verify Passwörter validieren, ohne Salz und Kosten zu kennen?

Ich dachte immer (obwohl ich es nie studiert habe), dass Sie das Salz in der Datenbank speichern müssen und wenn Sie dann das Passwort verifizieren wollen, hacken Sie es mit dem gegebenen Salz mit den gleichen Kosten. Wie kann password_verify() das Passwort überprüfen, ohne Salz und Kosten zu kennen?

Antwort

6

Die von zurückgegebene Zeichenfolge enthält nicht nur den Hash, sondern auch den Algorithmus, Kosten und Salz.

+0

... das ist eine # $ @% großartige Idee ... warum hat noch niemand daran gedacht? Ich dachte daran, auch eine "Passwort-Version" zu speichern. Wenn ich den Algorithmus änderte, konnten sich Leute mit "alten Hashes" trotzdem anmelden ... aber mit dieser API ist es nicht nötig, all das Zeug zu machen! –

+1

Ja, hoffentlich werden PHP-Entwickler endlich 'md5()' in Rente gehen. –

+0

@LucasMalor - Dies ist keine neue Erfindung, die PHP-Funktion 'crypt()' hat es die ganze Zeit so gemacht, und das ist die Arbeitsfunktion hinter 'password_hash()'. – martinstoeckli

Verwandte Themen