Kryptographie in TypeScript: Verschlüsselung und Hashing von Daten
In der modernen Webentwicklung ist Datensicherheit ein kritischer Aspekt. TypeScript, als streng typisierte Erweiterung von JavaScript, bietet leistungsstarke Werkzeuge zur Implementierung kryptographischer Operationen. In diesem Artikel betrachten wir die wichtigsten Verschlüsselungs- und Hashing-Algorithmen, die in TypeScript verfügbar sind, und zeigen, wie man sie in der Praxis anwendet.
Integriertes Modul crypto und Bibliotheken
Node.js bietet das integrierte Modul crypto, das vollständig mit TypeScript kompatibel ist. Für Browser-Anwendungen wird die Web Crypto API verwendet. Für komplexere Aufgaben wird die Bibliothek crypto-js empfohlen, die sowohl in Node.js als auch im Browser funktioniert.
Installation der erforderlichen Pakete:
npm install crypto-jsnpm install @types/crypto-js --save-devSymmetrische Verschlüsselung AES
Der AES-Algorithmus (Advanced Encryption Standard) ist die gängigste symmetrische Verschlüsselung. Er verwendet denselben Schlüssel zum Verschlüsseln und Entschlüsseln von Daten.
Beispiel einer AES-256-Implementierung in TypeScript:
import CryptoJS from 'crypto-js';
const SECRET_KEY = 'my-strong-secret-key-32chars';
function encryptAES(text: string): string { const encrypted = CryptoJS.AES.encrypt(text, SECRET_KEY); return encrypted.toString();}
function decryptAES(ciphertext: string): string { const decrypted = CryptoJS.AES.decrypt(ciphertext, SECRET_KEY); return decrypted.toString(CryptoJS.enc.Utf8);}
// Verwendungconst originalText = 'Geheime Daten zum Schutz';const encrypted = encryptAES(originalText);console.log('Verschlüsselt:', encrypted);
const decrypted = decryptAES(encrypted);console.log('Entschlüsselt:', decrypted);Asymmetrische Verschlüsselung RSA
RSA 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 ideal für die sichere Datenübertragung.
Beispiel mit Node.js crypto:
import * as crypto from 'crypto';
function generateRSAKeys(): { publicKey: string; privateKey: string } { const { publicKey, privateKey } = crypto.generateKeyPairSync('rsa', { modulusLength: 2048, publicKeyEncoding: { type: 'spki', format: 'pem' }, privateKeyEncoding: { type: 'pkcs8', format: 'pem' } }); return { publicKey, privateKey };}
function encryptRSA(plainText: string, publicKey: string): string { const buffer = Buffer.from(plainText, 'utf-8'); const encrypted = crypto.publicEncrypt(publicKey, buffer); return encrypted.toString('base64');}
function decryptRSA(cipherText: string, privateKey: string): string { const buffer = Buffer.from(cipherText, 'base64'); const decrypted = crypto.privateDecrypt(privateKey, buffer); return decrypted.toString('utf-8');}
// Beispiel zur Verwendungconst keys = generateRSAKeys();const message = 'Vertrauliche Nachricht';const encryptedRSA = encryptRSA(message, keys.publicKey);const decryptedRSA = decryptRSA(encryptedRSA, keys.privateKey);
console.log('Original:', message);console.log('Entschlüsselt:', decryptedRSA);Hashing von Daten
Hashing ist eine einseitige Umwandlung von Daten in eine Zeichenkette fester Länge. Im Gegensatz zur Verschlüsselung kann ein Hash nicht rückgängig gemacht werden. Hauptanwendungen:
- Passwortspeicherung — anstelle des Passworts wird dessen Hash gespeichert
- Datenintegritätsprüfung — Vergleich von Datei-Hashes
- Digitale Signaturen — Bestätigung der Urheberschaft
SHA-256
Der am weitesten verbreitete Algorithmus der SHA-2-Familie:
import CryptoJS from 'crypto-js';
function hashSHA256(data: string): string { return CryptoJS.SHA256(data).toString();}
Auch in der Bibliothek
Geolokalisierung und Karten in C++: Überblick über Bibliotheken und Werkzeuge
Prometheus-Metriken in Rust: Die Bibliotheken prometheus und metrics-exporter-prometheus
HTTP-Client für C++: Top-Bibliotheken für die Netzwerkarbeit