Salz mit tragbarem PHP -Passwort -Hashing -Framework erstellen
-
24-10-2019 - |
Frage
Ich würde gerne benutzen Tragbares PHP -Passwort -Hashing -Framework zu Hash -Passwörtern. Aber ich finde, dass seine Demos kein Salz verwenden, um ein Passwort zu haben. Aber es verwendet ein Dummy -Salz, um das Passwort zu überprüfen, das ich seltsam finde, und ich verstehe diese Idee überhaupt nicht.
$dummy_salt = '$2a$08$1234567890123456789012';
if (isset($dummy_salt) && strlen($hash) < 20)
$hash = $dummy_salt;
Ich frage mich, ob ich die Konventionmethode verwenden möchte, die ich das eindeutige Salz generieren und für jeden Benutzer in meiner Datenbank speichern kann, wie kann ich dann tragbare PHP -Kennworthashing -Framework verwenden, um Salze zu generieren?
Dies ist die Funktion, die ich mit Kennwörtern Hash -Passwörter verwende, aber mir wurde gesagt, dass SHA512 das gleiche Problem wie SHA1 hat, was dem Experten wie tragbarem PHP -Passwort -Hashing -Framework vertrauen kann.
function hash_sha512($phrase,&$salt = null)
{
//$pepper = '!@#$%^&*()_+=-{}][;";/?<>.,';
if ($salt == '')
{
$salt = substr(hash('sha512',uniqid(rand(), true).PEPPER_KEY.microtime()), 0, SALT_LENGTH);
}
else
{
$salt = substr($salt, 0, SALT_LENGTH);
}
return hash('sha512',$salt.PEPPER_KEY.$phrase);
}
Lassen Sie mich wissen, ob Sie eine Idee haben. Vielen Dank.
Lösung
Von dem Phass -Artikel aus dieser Seite verlinkt:
Neben dem tatsächlichen Hashing erzeugt Phass transparent zufällige Salze, wenn ein neues Kennwort oder eine neue Passphrase Hashed ist, und es codiert den Hash -Typ, das Salz und die Kennwortdeting -Iterationszahl in die "Hash -Codierungszeichenfolge", die es zurückgibt. Wenn Phass ein Kennwort oder eine Passphrase gegen einen gespeicherten Hash authentifiziert, extrahiert und verwendet es den Hash -Typ -Kennung, das Salz und die Iteration aus der "Hash -Codierungszeichenfolge". Daher müssen Sie sich nicht mit dem Salzen und Dehnen von selbst beschäftigen - Phass kümmert sich um diese für Sie.
... also ist es nicht überraschend, dass die Beispiele kein Salzen verwenden! Sie können Ihren Code übertrieben.
Die Code-Probe mit dem Dummy-Salz ist ein Beispiel dafür, wie ein Timing-Angriff verhindern kann, indem sichergestellt wird Benutzer. Es braucht ein Dummy -Salz, denn wenn der Benutzer nicht existiert, muss kein gespeichertes Salz verwendet werden.