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); // trueBeispiel 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 Auch in der Bibliothek
Java für Geolokalisierung und Karten: Bibliotheken, APIs und Beispiele
Generierung von PDF-Berichten in PHP: Bibliotheksübersicht und Codebeispiele
Bildverarbeitung mit Go: Größenänderung und Zuschneiden (resize, crop)
Apache POI Java: vollständiges Tutorial mit Codebeispielen