Kurzversion:Wie Hashwerte mit der JavaScript-Bibliothek Node-Password-Hash vergleichen?
Ich mag würde, wenn der gleiche Wert wissen, mit zufälligen Salz gehasht wird, wie kann ich überprüfen, ob derjenige, den ich jetzt „gleich“ zu dem einen ist bekam, die bereits in der Datenbank ist, gespeichert als das Benutzerpasswort. Was bedeutet gleich hier?
Lange Version:
Bisher dachte ich, dass Hash-Funktionen wie diese funktionieren, wenn Passwörter werden gehasht haben:
- einen Algorithmus wählen, lassen Sie uns sagen, es ist SHA1
- diesen Algorithmus verwenden um die Eingabe so zu ändern, dass Sie nicht erraten können, was die Eingabe war oder wie sie aussah
- Setzen Sie den Hashwert in die Datenbank mit dem Benutzer und wenn Login benötigt wird, verwenden Sie die Hash-Funktion wieder bei der Eingabe und es mit dem übereinstimmen, die bereits in der Datenbank ist
- Es wird empfohlen, zufällige Salze zu verwenden, speichern Sie sie neben den Benutzern und während der Login-Phase, nehmen Sie diese Salz heraus, um das angegebene Passwort zu hasen und zu vergleichen der Hashwert bereits in der Datenbank
Also, ich habe den folgenden Code in Node.js
var passwordHash = require('password-hash');
var foo = passwordHash.generate('password123');
var bar = passwordHash.generate('password123');
console.log(foo); //sha1$d1d19f32$1$d5cb099afdd9bb130c969e0394c9bf5e57d6a2aa
console.log(bar); //sha1$df372235$1$99dfd5485e8a223e21738621bf4a7cdfca949721
console.log(passwordHash.verify('password123', foo)); //true
console.log(passwordHash.verify('password123', bar)); //true
Ich weiß, dass passwordHash.generate()
zufälliges Salz verwendet, dann ist es der Teil zwischen $...$
. Ich kann in der Dokumentation nicht finden, dass das Salz irgendwo gespeichert wird, und wenn es ist, warum ist nicht für die zwei gehashten Werte identisch? Ich
dachte, dass passwordHash.verify()
Hashes "password123"
und prüft, ob es zu foo
und alternativ bar
identisch ist. Dies kann jedoch nicht passieren, weil ich immer wahr werde, aber foo
und bar
sind unterschiedlich.
Also wie funktioniert passwordHash.verify()
?
Ich vermute, das Salz ist der Teil zwischen 'sha1 $' und dem ersten '$' danach. (Z. B. "d1d19f32"). So kann passwordHash das Passwort mit demselben zuvor verwendeten Salto erneut hashen und sicherstellen, dass es den gleichen Hashwert erhält. –
Oh mein Gott. Du bist Genie. Danke, es war nichts kompliziertes – sundri23
@ user2882590 Sie möchten möglicherweise eine andere Bibliothek verwenden. Das README für die Bibliothek, die Sie verwenden, besagt, dass es veraltet ist, und Sie stattdessen bcrypt oder scrypt verwenden sollten https://github.com/davidwood/node-password-hash/blob/master/README.md – bhspencer