Bcrypt für JavaScript (Node.js): Komplette Anleitung mit Beispielen

Online Python-Trainer für Anfänger

Lernen Sie Python einfach ohne theoretische Überlastung. Lösen Sie praktische Aufgaben mit automatischer Überprüfung und schreiben Sie Code direkt im Browser.

Kurs starten

Bcrypt für JavaScript (Node.js): Komplette Anleitung

1. Was ist Bcrypt und warum wird es benötigt?

Bcrypt ist eine adaptive kryptografische Hash-Funktion, die speziell für die sichere Speicherung von Passwörtern entwickelt wurde. Im Gegensatz zu herkömmlichen Hash-Funktionen (MD5, SHA-1, SHA-256), die für schnelle Berechnungen ausgelegt sind, ist Bcrypt bewusst langsam und ressourcenintensiv. Dies macht Brute-Force-Angriffe und Rainbow-Table-Angriffe praktisch undurchführbar. Die Bibliothek bcrypt für Node.js bietet eine einfache und zuverlässige Schnittstelle zum Hashen und Überprüfen von Passwörtern.

Warum Bcrypt verwenden? Bei der Registrierung eines Benutzers auf einer Website darf das Passwort niemals im Klartext gespeichert werden. Wenn die Datenbank kompromittiert wird, erhält der Angreifer Zugriff auf alle Passwörter. Bcrypt löst dieses Problem: Sie hashen das Passwort mit einem eindeutigen „Salt“ und speichern nur den Hash. Bei der Anmeldung hashen Sie das eingegebene Passwort erneut und vergleichen es mit dem gespeicherten Hash. Bcrypt generiert und integriert das Salt automatisch in das Ergebnis, sodass Sie es nicht separat speichern müssen.

Die wichtigste Eigenschaft von Bcrypt ist die Möglichkeit, den „Cost Factor“ anzupassen. Je höher der Cost-Wert, desto mehr Zeit wird für die Berechnung des Hashs benötigt. Mit zunehmender Rechenleistung können Sie den Cost einfach erhöhen, und alte Hashes bleiben gültig (bei der Überprüfung wird der im Hash gespeicherte Cost verwendet). Dies macht Bcrypt zukunftssicher gegenüber Fortschritten in der Hardware-Beschleunigung.

2. Installation

Um die Bcrypt-Bibliothek in einem Node.js-Projekt zu installieren, führen Sie den folgenden Befehl im Terminal (im Stammverzeichnis des Projekts) aus:

npm install bcrypt

Nach der Installation können Sie die Bibliothek in Ihren Code importieren:

const bcrypt = require('bcrypt');

Wenn Sie ES-Module verwenden (type: "module" in package.json), sieht der Import wie folgt aus:

import bcrypt from 'bcrypt';

3. Schnellstart – Minimales Arbeitsbeispiel

In diesem Beispiel hashen wir ein Passwort und überprüfen es anschließend. Dies ist die Grundlage für jedes Authentifizierungssystem.

const bcrypt = require('bcrypt');

const plainPassword = 'mySuperSecretPassword123!';
const saltRounds = 10;

// Passwort hashen
bcrypt.hash(plainPassword, saltRounds, function(err, hash) {
    if (err) {
        console.error('Fehler beim Hashen:', err);
        return;
    }
    console.log('Passwort-Hash:', hash);

    // Passwort überprüfen
    bcrypt.compare(plainPassword, hash, function(err, result) {
        if (err) {
            console.error('Fehler beim Vergleich:', err);
            return;
        }
        console.log('Passwort stimmt überein:', result); // true
    });
});

Dieser Code macht zwei Dinge: Er erstellt einen Hash des Passworts und überprüft dann, ob das ursprüngliche Passwort mit diesem Hash übereinstimmt. Beachten Sie, dass saltRounds die Rechenkomplexität bestimmt (empfohlener Wert: 10–12).

4. Wichtige Methoden/Funktionen/Klassen

4.1. bcrypt.hash(data, saltOrRounds, callback)

Signatur: bcrypt.hash(data: string | Buffer, saltOrRounds: number | string, callback: (err: Error | null, encrypted: string) => void): void

Funktion: Hasht asynchron einen String oder Buffer. saltOrRounds kann eine Zahl (Anzahl der Runden) oder ein fertiges Salt (String) sein. Gibt den Hash über den Callback zurück.

Beispiel:

bcrypt.hash('password123', 12, (err, hash) => {
    if (err) throw err;
    console.log(hash); // $2b$12$...
});

4.2. bcrypt.hashSync(data, saltOrRounds)

Signatur: bcrypt.hashSync(data: string | Buffer, saltOrRounds: number | string): string

Funktion: Synchrone Version von

Empfehlungen