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: Verschlüsselung und Hashing mit dem Modul crypto



Datensicherheit ist einer der Schlüsselaspekte der modernen Webentwicklung. In Node.js bietet das integrierte Modul crypto leistungsstarke Werkzeuge für den kryptographischen Schutz: vom Hashing von Passwörtern bis zur asymmetrischen Verschlüsselung. In diesem Artikel werden wir die wichtigsten Funktionen des Moduls crypto im Detail besprechen, lernen, wie man Daten verschlüsselt und entschlüsselt, und wie man Passwörter sicher mit Hashing speichert.



1. Einbinden des Moduls crypto

Das Modul crypto ist integriert, daher ist keine Installation zusätzlicher Pakete erforderlich. Es wird auf die Standardmethode eingebunden:

const crypto = require('crypto');


2. Hashing von Daten

Hashing ist der Prozess der Umwandlung von Daten beliebiger Länge in eine Zeichenkette fester Länge. Im Gegensatz zur Verschlüsselung ist eine Hash-Funktion irreversibel. Die gängigsten Algorithmen sind SHA-256, SHA-512.



Beispiel: Hashing eines Strings mit SHA-256

const data = 'PythonLib — Ihr Wegweiser in die IT-Welt';const hash = crypto.createHash('sha256').update(data).digest('hex');console.log('SHA-256 Hash:', hash);


Beispiel: Hashing mit Salt (bcrypt)

Für die sichere Speicherung von Passwörtern wird die Verwendung des Algorithmus bcrypt oder scrypt empfohlen. Node.js bietet integrierte Unterstützung für scrypt:

const password = 'mySuperPassword123';const salt = crypto.randomBytes(16).toString('hex');

crypto.scrypt(password, salt, 64, (err, derivedKey) => { if (err) throw err; console.log('Passwort-Hash:', derivedKey.toString('hex'));});


3. Symmetrische Verschlüsselung (AES)

Symmetrische Verschlüsselung verwendet denselben Schlüssel zum Verschlüsseln und Entschlüsseln von Daten. Der gebräuchlichste Algorithmus ist AES (Advanced Encryption Standard).



Datenverschlüsselung mit AES-256-CBC

const algorithm = 'aes-256-cbc';const key = crypto.randomBytes(32); // 256-Bit-Schlüsselconst iv = crypto.randomBytes(16);  // Initialisierungsvektor

function encrypt(text) { const cipher = crypto.createCipheriv(algorithm, key, iv); let encrypted = cipher.update(text, 'utf8', 'hex'); encrypted += cipher.final('hex'); return { iv: iv.toString('hex'), encryptedData: encrypted };}

const originalText = 'Geheime Daten für PythonLib';const encrypted = encrypt(originalText);console.log('Verschlüsselte Daten:', encrypted);


Datenentschlüsselung

function decrypt(encryptedObj) {  const decipher = crypto.createDecipheriv(    algorithm,    key,    Buffer.from(encryptedObj.iv, 'hex')  );  let decrypted = decipher.update(encryptedObj.encryptedData, 'hex', 'utf8');  decrypted += decipher.final('utf8');  return decrypted;}

const decryptedText = decrypt(encrypted);console.log('Entschlüsselter Text:', decryptedText);


4. Asymmetrische Verschlüsselung (RSA)

Asymmetrische Verschlüsselung verwendet ein Schlüsselpaar: einen öffentlichen (public) und einen privaten (private) Schlüssel. Mit dem öffentlichen Schlüssel werden Daten verschlüsselt, mit dem privaten entschlüsselt. Dies ist die Grundlage von HTTPS und digitalen Signaturen.



Generierung eines RSA-Schlüsselpaares

const { generateKeyPairSync } = require('crypto');

const { publicKey, privateKey } = generateKeyPairSync('rsa', { modulusLength: 2048, publicKeyEncoding: { type: 'spki', format: 'pem' }, privateKeyEncoding: { type: 'pkcs8', format: 'pem' }});

console.log('Öffentlicher Schlüssel:', publicKey);console.log('Privater Schlüssel:', privateKey);


Verschlüsselung und Entschlüsselung mit RSA

const secretMessage = 'Hallo, PythonLib!';

// Verschlüsselung mit öffentlichem Schlüsselconst encryptedData = crypto.publicEncrypt( { key: publicKey, padding: crypto.constants.RSA_PKCS1_OAEP_PADDING }, Buffer.from(secretMessage));console.log('Verschl

Empfehlungen