Hallo,
Seit PHP 5.5 ist ja passwort_hash() die gängige Funktion, um Passwörter zu hashen.
Bevor das Passwort aber gehasht wird, wird an dem Passwort noch ein "Salt" angehangen (zufällige Zeichenkette). Es wird also letzendlich das Passwort+Salt als gesamtes gehasht. Der Salt wiederrum wird jedesmal zufällig neu generiert, sodass wenn man 2x das selbe Passwort hashen würde, am Ende niemals den selben Hash erhält.
Jett sei folgendes Beispiel gegeben:
1. Frage:
Das ganze funktioniert wie gewünscht. Was mich aber wundert ist, wie die Überprüfung der Funktion "password_verify()" genau aussieht. Weil die Funktion "password_verify()" kennt ja den Salt nicht?!
2. Frage:
Folgendes Beispiel:
Erzeugt folgende Ausgabe:
$2y$10$6aO7rY3RUgxO/hTvkf3vbOzwmMOQNeRwWm9pnB6E0WyFCHxwzD7BW
$2y$10$5LmOzbC/Dg.hn4/Zkdi4vuUNECalQSjDLZMhGPMMWeCYv3dnn0I3m
$2y$10$WwxW5lf1zcLoosAsvXrINuDWSIerveBxtEtLnFixPUC8diJKn2d2q
$2y$10$od7Kr/CYef3FEi68G1VgXuWlshn2LWno4QPT0H1R1Rkq6WKlQD3mG
$2y$10$XotsXy4p5G1d.kp36PmjNutEhPEkkLx/7d22e1ISH9IDsgyY9uLfe
Wieso steht bei jedem Hash am Anfang "$2y$10$" ? Was ist das? Selbst wenn ich das Skript erneut laufen lasse, steht wieder "$2y$10$" am Anfang jeder Zeile. Nur der Rest danach ist immer verschieden.
Seit PHP 5.5 ist ja passwort_hash() die gängige Funktion, um Passwörter zu hashen.
Bevor das Passwort aber gehasht wird, wird an dem Passwort noch ein "Salt" angehangen (zufällige Zeichenkette). Es wird also letzendlich das Passwort+Salt als gesamtes gehasht. Der Salt wiederrum wird jedesmal zufällig neu generiert, sodass wenn man 2x das selbe Passwort hashen würde, am Ende niemals den selben Hash erhält.
Jett sei folgendes Beispiel gegeben:
PHP:
<?php
$pw = "hallo";
$hash = password_hash($pw, PASSWORD_DEFAULT);
echo $hash;
if (password_verify($pw, $hash)) {
echo "Correct";
} else {
echo "False";
}
?>
1. Frage:
Das ganze funktioniert wie gewünscht. Was mich aber wundert ist, wie die Überprüfung der Funktion "password_verify()" genau aussieht. Weil die Funktion "password_verify()" kennt ja den Salt nicht?!
2. Frage:
Folgendes Beispiel:
PHP:
<?php
for ($i=0; $i < 5; $i++) {
echo password_hash("hallo", PASSWORD_DEFAULT);
echo "<br>";
}
?>
Erzeugt folgende Ausgabe:
$2y$10$6aO7rY3RUgxO/hTvkf3vbOzwmMOQNeRwWm9pnB6E0WyFCHxwzD7BW
$2y$10$5LmOzbC/Dg.hn4/Zkdi4vuUNECalQSjDLZMhGPMMWeCYv3dnn0I3m
$2y$10$WwxW5lf1zcLoosAsvXrINuDWSIerveBxtEtLnFixPUC8diJKn2d2q
$2y$10$od7Kr/CYef3FEi68G1VgXuWlshn2LWno4QPT0H1R1Rkq6WKlQD3mG
$2y$10$XotsXy4p5G1d.kp36PmjNutEhPEkkLx/7d22e1ISH9IDsgyY9uLfe
Wieso steht bei jedem Hash am Anfang "$2y$10$" ? Was ist das? Selbst wenn ich das Skript erneut laufen lasse, steht wieder "$2y$10$" am Anfang jeder Zeile. Nur der Rest danach ist immer verschieden.