Vom Github :
So hacken Sie ein Passwort:
var bcrypt = require('bcrypt');
bcrypt.genSalt(10, function(err, salt) {
bcrypt.hash("B4c0/\/", salt, function(err, hash) {
// Store hash in your password DB.
});
});
So überprüfen Sie ein Passwort:
// Load hash from your password DB.
bcrypt.compare("B4c0/\/", hash, function(err, res) {
// res == true
});
bcrypt.compare("not_bacon", hash, function(err, res) {
// res = false
});
Wie können von oben keine Salzwerte in die Vergleiche einbezogen werden? Was vermisse ich hier?
column_password = hash, column_salt = salt
vscolumn_password = hash_salt
. Angreifer hat immer noch die gleichen Informationen. Der springende Punkt ist, jedes Passwort so zufällig und größer zu machen, dass es unwahrscheinlich wird, dass jemand es vorberechnet hat.Ich hatte auch die gleiche Frage wie das Originalplakat und es dauerte ein bisschen, bis ich mich umgesehen und verschiedene Dinge ausprobiert hatte, um den Mechanismus zu verstehen. Wie bereits von anderen erwähnt, wird das Salz zum endgültigen Hash verkettet. Das bedeutet also ein paar Dinge:
Diese beiden Dinge sind in der Implementierung normalerweise fest codiert, z. B. definiert die bcrypt-Implementierungsquelle für bcryptjs die Salt-Länge als 16
Um das Grundkonzept hinter der Idee zu veranschaulichen, wenn man es manuell machen möchte, würde es ähnlich wie das folgende aussehen. Ich empfehle nicht, solche Dinge selbst zu implementieren, wenn es Bibliotheken gibt, die Sie dazu bekommen können.
quelle
Da ich selbst die gleiche Frage hatte, weiß ich genau, woran Sie denken.
Sie haben ein Missverständnis zwischen "Secret Key", das in kryptografischen Algorithmen verwendet wird, und "Salt", das verwendet wird, um den Verschlüsselungsprozess zu verlangsamen und Hackern die Anwendung von Brute Force zu erschweren.
Wenn Sie das einfache Passwort und das Salt verwenden, um den Hash zu generieren, verwendet dieser Hash das Passwort selbst als geheimen Schlüssel ! Wenn Sie das nächste Mal versuchen, es mit einem einfachen Passwort zu vergleichen, muss dieses einfache Passwort genau das gleiche sein, das Sie zum Generieren des Hashs verwendet haben! Deshalb müssen Sie es nicht woanders speichern, da es vom Benutzer immer sowohl bei der Registrierung als auch bei der Anmeldung bereitgestellt wird!
quelle