Kryptographie in TypeScript: Verschlüsselung und Hashing

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 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-dev


Symmetrische 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();}

Empfehlungen