Kryptographie in Node.js: Verschlüsselung und Hashing mit crypto

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

Kryptographie in Node.js: Das integrierte Modul crypto



In der modernen Webentwicklung ist Datensicherheit ein kritisch wichtiger Aspekt. Node.js bietet ein leistungsstarkes und flexibles integriertes Modul crypto, das eine breite Palette kryptografischer Funktionen implementiert. Dieses Modul erfordert keine Installation zusätzlicher Pakete und ermöglicht die Lösung von Aufgaben wie Hashing, symmetrischer und asymmetrischer Verschlüsselung, Erstellung digitaler Signaturen und HMAC (Hash-based Message Authentication Code).



In diesem Artikel werden wir die wichtigsten Funktionen von crypto im Detail besprechen und praktische Codebeispiele geben.



Hauptfunktionen des Moduls crypto



  • Hashing — Umwandlung von Daten beliebiger Länge in eine Zeichenkette fester Länge (SHA-256, SHA-512, MD5).
  • Symmetrische Verschlüsselung — Verschlüsselung und Entschlüsselung mit einem geheimen Schlüssel (AES-256-CBC, AES-192-GCM).
  • Asymmetrische Verschlüsselung — Verschlüsselung mit einem Schlüsselpaar (öffentlich/privat) basierend auf RSA oder ECDH.
  • HMAC — Hashing mit einem geheimen Schlüssel zur Überprüfung der Integrität und Authentizität einer Nachricht.
  • Digitale Signaturen — Erstellung und Verifikation von Signaturen zur Bestätigung der Urheberschaft.


Einbinden des Moduls



Das Modul crypto ist in Node.js integriert, daher erfolgt der Import auf standardmäßige Weise:



const crypto = require('crypto');


Beispiel 1: Hashing von Daten (SHA-256)



Hashing ist eine Einwegfunktion, die häufig zum Speichern von Passwörtern und zur Überprüfung der Dateiintegrität verwendet wird.



const data = 'PythonLib — Bildungsportal';

// SHA-256-Hash erstellenconst hash = crypto.createHash('sha256');hash.update(data);const hexHash = hash.digest('hex');

console.log('Ursprüngliche Daten:', data);console.log('SHA-256-Hash:', hexHash);// Ausgabe: SHA-256-Hash: b5a1... (64 Zeichen)


Wichtig: Verwenden Sie zum Speichern von Passwörtern keinen einfachen Hash, sondern eine Funktion mit „Salt“ – z. B. crypto.scryptSync() oder pbkdf2Sync().



Beispiel 2: Hashing eines Passworts mit Salt (scrypt)



const password = 'MySecurePassword123';

// Generierung eines zufälligen Saltsconst salt = crypto.randomBytes(16).toString('hex');

// Erstellen eines Hashs mit Salt (scrypt)const hash = crypto.scryptSync(password, salt, 64).toString('hex');

console.log('Salt:', salt);console.log('Passwort-Hash:', hash);

// Zur Überprüfung verwenden wir dasselbe Salt und vergleichen die Hashesconst isMatch = crypto.scryptSync(password, salt, 64).toString('hex') === hash;console.log('Passwort stimmt überein:', isMatch); // true


Beispiel 3: Symmetrische Verschlüsselung AES-256-CBC



Symmetrische Verschlüsselung verwendet einen Schlüssel für Ver- und Entschlüsselung. Der AES-256-CBC-Algorithmus erfordert außerdem einen Initialisierungsvektor (IV).



// Verschlüsselungsfunktionfunction encrypt(text, key) {    const iv = crypto.randomBytes(16); // IV generieren    const cipher = crypto.createCipheriv('aes-256-cbc', key, iv);    let encrypted = cipher.update(text, 'utf8', 'hex');    encrypted += cipher.final('hex');    return { iv: iv.toString('hex'), encrypted };}

// Entschlüsselungsfunktionfunction decrypt(encrypted, key, ivHex) { const iv = Buffer.from(ivHex, 'hex'); const decipher = crypto.createDecipheriv('aes-256-cbc', key, iv); let decrypted = decipher.update(encrypted, 'hex', 'utf8'); decrypted += decipher.final('utf8'); return decrypted;}

// Verwendungconst key = crypto.randomBytes(32); // 256-Bit-Schlüsselconst secretMessage = 'Geheime Daten für PythonLib';

const encryptedData = encrypt(secretMessage, key);console.log('Verschlüsselt:', encryptedData.encrypted);console.log('IV:', encryptedData.iv);

const decryptedMessage = decrypt(encryptedDa

Empfehlungen