Eine der besten Möglichkeiten, Passwörter sicher zu speichern, besteht darin, sie zu salzen und zu hashen. Salting und Hashing wandeln ein einfaches Passwort in einen eindeutigen Wert um, der schwer rückgängig zu machen ist. Mit der bcrypt-Bibliothek können Sie Passwörter in Node.js mit sehr geringem Aufwand hashen und salzen.
Was ist Passwort-Hashing?
Passwort-Hashing bedeutet, dass ein Klartextpasswort durch einen Hash-Algorithmus geleitet wird, um einen eindeutigen Wert zu generieren. Einige Beispiele für Hash-Algorithmen sind bcrypt, scrypt und SHA. Der Nachteil von Hashing ist, dass es vorhersehbar ist.
Jedes Mal, wenn Sie dieselbe Eingabe an einen Hash-Algorithmus übergeben, wird dieselbe Ausgabe generiert. Ein Hacker mit Zugriff auf das gehashte Passwort kann die Verschlüsselung zurückentwickeln, um das ursprüngliche Passwort zu erhalten. Sie können Techniken wie verwenden Brute-Force-Angriffe oder Regenbogentische. Hier kommt das Salzen ins Spiel.
Was ist Password Salting?
Passwortsalzung
fügt einem Passwort eine zufällige Zeichenfolge (das Salz) hinzu, bevor es gehasht wird. Auf diese Weise wird der generierte Hash jedes Mal anders sein. Selbst wenn ein Hacker das gehashte Passwort erhält, ist es für ihn unpraktisch, das ursprüngliche Passwort zu entdecken, das es generiert hat.So verwenden Sie bcrypt zum Hashen und Verifizieren eines Passworts
bcrypt ist ein npm-Modul, das das Salzen und Hashen von Passwörtern vereinfacht.
Schritt 1: bcrypt installieren
Verwendung von npm:
npm Installieren bcrypt
Verwendung von Garn:
Garn hinzufügen bcrypt
Schritt 2: Bcrypt importieren
konst bcrypt = erfordern("bcrypt")
Schritt 3: Generieren Sie ein Salt
Um das Salz zu generieren, rufen Sie die auf bcrypt.genSalt() Methode. Diese Methode akzeptiert einen ganzzahligen Wert, der der Kostenfaktor ist, der die Zeit bestimmt, die zum Hashen eines Passworts benötigt wird. Je höher der Kostenfaktor, desto länger dauert der Algorithmus und desto schwieriger ist es, den Hash mit Brute Force rückgängig zu machen. Ein guter Wert sollte hoch genug sein, um das Passwort zu sichern, aber auch niedrig genug, um den Prozess nicht zu verlangsamen. Sie liegt in der Regel zwischen 5 und 15. In diesem Tutorial verwenden wir 10.
bcrypt.genSalt (10, (äh, Salz) => {
// benutzenSalzzuHaschPasswort
})
Schritt 4: Hashen Sie das Passwort
Übergeben Sie das einfache Passwort und das generierte Salz an die hash() Methode:
bcrypt.genSalt (10, (äh, Salz) => {
bcrypt.hash (KlartextPasswort, Salz, Funktion(äh, Hasch) {
// Hash in der Datenbank speichern
});
})
Sobald Sie den Hash generiert haben, speichern Sie ihn in der Datenbank. Sie verwenden es, um ein Kennwort zu überprüfen und einen Benutzer zu authentifizieren, der versucht, sich anzumelden.
Anstatt Salt und Hash separat zu generieren, können Sie Salt und Hash auch automatisch mit einer einzigen Funktion generieren.
bcrypt.hash (KlartextPasswort, 10, Funktion(äh, Hasch) {
// Hash in der Datenbank speichern
});
Schritt 5: Passwörter mit bcrypt vergleichen
Zu Benutzer authentifizieren, müssen Sie das von ihnen bereitgestellte Passwort mit dem in der Datenbank vergleichen. bcrypt.compare() akzeptiert das Klartext-Passwort und den von Ihnen hinterlegten Hash sowie eine Callback-Funktion. Dieser Callback liefert ein Objekt, das alle aufgetretenen Fehler und das Gesamtergebnis des Vergleichs enthält. Wenn das Passwort mit dem Hash übereinstimmt, ist das Ergebnis wahr.
bcrypt.compare (KlartextPasswort, Hash, Funktion(äh, Ergebnis) {
wenn (Ergebnis) {
// Passwort ist gültig
}
});
Verwenden von Async/Await
Sie können Passwörter mit async/await wie folgt hashen und verifizieren.
asynchronFunktionHashPasswort(KlartextPasswort) {
konst hash = erwarten bcrypt.hash (KlartextPasswort, 10);
// Hash in der Datenbank speichern
}
// Passwort vergleichen
asynchronFunktionvergleichenPasswort(KlartextPasswort, Hash) {
konst Ergebnis = erwarten bcrypt.compare (KlartextPasswort, Hash);
Rückkehr Ergebnis;
}
Versprechen verwenden
Die bcrypt-Bibliothek unterstützt auch die Verwendung von Promises.
FunktionHashPasswort(KlartextPasswort) {
bcrypt.hash(KlartextPasswort, 10)
.dann (Hash => {
// Hash in der Datenbank speichern
})
.fangen(fehler => {
Konsole.log (fehler)
})
}
FunktionvergleichenPasswort(KlartextPasswort, Hash) {
bcyrpt.vergleichen(KlartextPasswort, Hasch)
.dann (Ergebnis => {
Rückkehr Ergebnis
})
.fangen(fehler => {
Konsole.log (fehler)
})
}
Hashing und Salting ist ein einfacher Gewinn
Sie können die bcrypt-Bibliothek verwenden, um Kennwörter in Node.js zu hashen und zu überprüfen. Das Hashen von Passwörtern minimiert die Wahrscheinlichkeit, dass Cyberkriminelle sie verwenden, um auf sensible Daten oder Dienste zuzugreifen. Das Salten Ihrer gehashten Passwörter macht sie noch sicherer. Validieren Sie neben Hashing immer die Passwortstärke als zusätzliche Sicherheitsmaßnahme.
Die 8 häufigsten Tricks zum Hacken von Passwörtern
Lesen Sie weiter
Verwandte Themen
- Programmierung
- Sicherheit
- Programmierung
- JavaScript
- Sicherheit
- Algorithmen
Über den Autor
Mary Gathoni ist eine Softwareentwicklerin mit einer Leidenschaft für die Erstellung technischer Inhalte, die nicht nur informativ, sondern auch ansprechend sind. Wenn sie nicht gerade programmiert oder schreibt, trifft sie sich gerne mit Freunden und ist draußen.
Abonnieren Sie unseren Newsletter
Abonnieren Sie unseren Newsletter für technische Tipps, Rezensionen, kostenlose E-Books und exklusive Angebote!
Klicken Sie hier, um sich anzumelden