Wie sind diese zwei Zeilen PHP anders?
Frage
Unter der Annahme, wir ein Salz haben, die in der Datenbank ist, und das hat wie diese erzeugt worden
$salt = time();
Was ist der Unterschied zwischen diesen zwei Linien.
$pass1 = hash('sha1', $password . $salt);
$pass2 = hash_hmac('sha1', $password, $salt);
Sie erzeugen nicht die gleiche Leistung. Die erste, die Funktion übernimmt hash
2 params, während die hash_hmac
3 params muss. Sie würden denken daher, dass wir das dritte zusätzliche param unter Verwendung der $salt
separat bekommen (die dritte param zu erfüllen) im Gegensatz es mit dem Passwort ($password . $salt
) zu verketten, wie wir in Linie taten 2. Aber es ist nicht so einfach, das 2 Ergebnisse sind unterschiedlich. Warum? Was ist auf genau geht hier vor?
Lösung
Da HMAC SHA-1 nicht das gleiche wie SHA-1 mit der Nachricht und Schlüssel verketteten ist. HMAC ist mehr wie sha1($salt . sha1($salt . $password))
, aber nicht genau. Wikipedia hat eine schöne Beschreibung von HMAC .