2017-12-17 8 views
3

Ich bin versucht, ein Passwort Hash, bevor ich es in einer Benutzerdatenbank speichern, so dass ich führen Sie den Code:password_hash scheint eine Zufallsvariable zurück

$hashedPass = password_hash($pass, PASSWORD_DEFAULT); 

Dieser Code gibt mir einen Wert, $ 10 $ 2j sagen $ wAJr0Z1spRtOcK4cLhIkguUCKgwZKYrwm.nRhm6AtCfDH8ri7ylJu welche in der Datenbank gespeichert sind. Jetzt, wenn ich versuche anzumelden, die gleiche Zeichenfolge als Kennwort setzte in gibt einen ganz anderen $ hashedPass: sagen 2j $ 10 $ $ cayCQDSQ6pCICSozuIgBNu9uIopIoT5R6Y7aHXG6wx4v/oKx.Ipse

Ist das nur zufällig? Gibt es etwas, das ich stattdessen verwenden sollte?

+2

'password_verify'. – tkausl

+0

nur zur Vollständigkeit der Link zu [passoword_verify] (http://php.net/manual/en/function.password-verify.php): http://php.net/manual/en/function.password-verify. php – Jeff

+0

Die Ergebnisse und wie es zu verwenden ist, wird im Rückgabewert des Handbuchs für die Funktion angegeben: http://php.net/manual/en/function.password-hash.php#refsect1-function.password-hash- returnvalues ​​ – fyrye

Antwort

4

Dies ist das erwartete Verhalten. password_hash generiert ein Salz, das zusammen mit dem Klartextkennwort verwendet wird, um einen Hash zu generieren. Das Salz wird zufällig generiert, so dass die Ausgabe jedes Mal anders ist, wenn Sie password_hash aufrufen.

Verwenden Sie password_verify, um Kennwörter zu überprüfen.

http://php.net/manual/en/function.password-verify.php

Alle notwendigen Informationen für password_verify ein Text-Kennwort zu überprüfen, ob in der Hash selbst enthalten. Die Anatomie eines Hash hängt von dem verwendeten Algorithmus, für den Passwort-Hash Sie bereitgestellt:

$2y$10$wAJr0Z1spRtOcK4cLhIkguUCKgwZKYrwm.nRhm6AtCfDH8ri7ylJu 
  • 2j $ $ Dieses Präfix zeigt an, dass dies ein bcrypt Hash
  • Dies ist die Kostenparameter
  • wAJr0Z1spRtOcK4cLhIkgu die ersten 22 Zeichen ist das Salz
  • UCKgwZKYrwm.nRhm6AtCfDH8 ri7ylJu Die übrigen 31 Zeichen ist, die Hash-

https://en.wikipedia.org/wiki/Bcrypt

+1

Hinweis für Vollständigkeit: Das zufällige Salz plus einige andere Daten wird den Hash-Daten vorangestellt, damit 'password_verify' den gleichen Hash für Vergleich erzeugen kann. – zaph

+0

Kann ich password_verify mit beiden Parametern als gehashte Passwörter ausführen? Im Beispiel auf php.net wird nur eines der Passwörter gehashed –

+0

Oh, warte. . Ich habe gerade herausgefunden, dass es keinen Grund gibt, das Passwort zu hashen, wenn es nicht gespeichert wird. Es tut uns leid –

Verwandte Themen