Node.js crypto-Modul
von Node.jscryptoDas Modul ist ein eingebautes Modul, das kryptografische Funktionalität bereitstellt, einschließlich Wrapper für die Hash-, HMAC-, Verschlüsselungs-, Entschlüsselungs-, Signierungs- und Verifizierungsfunktionen von OpenSSL. Es ermöglicht Entwicklern, verschiedene kryptografische Operationen in Node.js-Anwendungen durchzuführen.
Kernfunktionen
Hash-Algorithmus
Ein Hash-Algorithmus ist eine Einwegfunktion, die eine Eingabe beliebiger Länge in eine Ausgabe fester Länge umwandelt.cryptoDas Modul unterstützt mehrere Hash-Algorithmen, wie z. B. SHA-256, MD5 usw.
Beispiel
// Einen SHA-256-Hash erstellen
const hash = crypto.createHash('sha256');
hash.update('Hello World');
console.log(hash.digest('hex'));
// Ausgabe: a591a6d40bf420404a011733cfb7b190d62c65bf0bcda32b57b277d9ad9f146
HMAC (schlüsselbasierter Hash-Nachrichtenauthentifizierungscode)
HMAC ist ein Mechanismus zur Nachrichtenauthentifizierung, der eine kryptografische Hashfunktion in Kombination mit einem geheimen Schlüssel verwendet.
Beispiel
const secret = 'mysecret';
const hmac = crypto.createHmac('sha256', secret);
hmac.update('Hello World');
console.log(hmac.digest('hex'));
// Ausgabe: 9b8e8b0e3b9e9b1a3b9e9b1a3b9e9b1a3b9e9b1a3b9e9b1a3b9e9b1a3b9e9b1a
Verschlüsselung und Entschlüsselung
Symmetrische Verschlüsselung
Die symmetrische Verschlüsselung verwendet denselben Schlüssel sowohl für die Verschlüsselung als auch für die Entschlüsselung.cryptoDas Modul unterstützt Algorithmen wie AES und DES.
Beispiel
// Verschlüsseln
const algorithm = 'aes-256-cbc';
const key = crypto.randomBytes(32);
const iv = crypto.randomBytes(16);
const cipher = crypto.createCipheriv(algorithm, key, iv);
let encrypted = cipher.update('Hello World', 'utf8', 'hex');
encrypted += cipher.final('hex');
console.log(encrypted);
// Entschlüsseln
const decipher = crypto.createDecipheriv(algorithm, key, iv);
let decrypted = decipher.update(encrypted, 'hex', 'utf8');
decrypted += decipher.final('utf8');
console.log(decrypted);
Asymmetrische Verschlüsselung
Asymmetrische Verschlüsselung verwendet ein Schlüsselpaar aus öffentlichem und privatem Schlüssel; der öffentliche Schlüssel wird zur Verschlüsselung verwendet und der private Schlüssel zur Entschlüsselung.
Beispiel
// Schlüsselpaar generieren
const { publicKey, privateKey } = crypto.generateKeyPairSync('rsa', {
modulusLength: 2048,
});
// Verschlüsseln
const encryptedData = crypto.publicEncrypt(
publicKey,
Buffer.from('Hello World')
);
console.log(encryptedData.toString('base64'));
// Entschlüsseln
const decryptedData = crypto.privateDecrypt(
privateKey,
encryptedData
);
console.log(decryptedData.toString());
Digitale Signatur und Verifikation
Digitale Signaturen werden verwendet, um die Integrität und Herkunft von Daten zu verifizieren.
Beispiel
// Schlüsselpaar generieren
const { privateKey, publicKey } = crypto.generateKeyPairSync('rsa', {
modulusLength: 2048,
});
// Signatur erstellen
const sign = crypto.createSign('SHA256');
sign.update('some data to sign');
const signature = sign.sign(privateKey, 'hex');
console.log(signature);
// Signatur verifizieren
const verify = crypto.createVerify('SHA256');
verify.update('some data to sign');
console.log(verify.verify(publicKey, signature, 'hex'));
// Ausgabe: true
Generierung von Zufallszahlen
cryptoDas Modul bietet Methoden zur Generierung kryptografisch sicherer Zufallszahlen.
Beispiel
// 16 Bytes Zufallsdaten generieren
const randomBytes = crypto.randomBytes(16);
console.log(randomBytes.toString('hex'));
// Eine zufällige Ganzzahl generieren
const randomInt = crypto.randomInt(1, 100);
console.log(randomInt);
Sicherheitsaspekte
- Schlüsselverwaltung: Schlüssel niemals im Code fest verdrahten; verwenden Sie Umgebungsvariablen oder ein Schlüsselverwaltungssystem.
- Algorithmusauswahl: Vermeiden Sie die Verwendung bekannter unsicherer Algorithmen wie MD5 und SHA1.
- **Initialisierungsvektor (IV)**: Bei symmetrischer Verschlüsselung sollte für jede Verschlüsselung ein anderer IV verwendet werden.
- Kryptografische Parameter: Verwenden Sie ausreichend lange Schlüssellängen (z. B. AES-256 statt AES-128).
Praktische Anwendungsszenarien
- Passwortspeicherung: Verwenden Sie Hash-Algorithmen, um Benutzerpasswörter zu speichern
- Verschlüsselung der Datenübertragung: Schützen Sie Daten bei der Netzwerkübertragung
- API-Signaturüberprüfung: Stellen Sie die Integrität von API-Anfragen sicher
- JWT-Token: JSON Web Tokens generieren und verifizieren
- Dateiintegritätsprüfung: Überprüfen Sie den Hash heruntergeladener Dateien
Zusammenfassung
von Node.jscryptoDas Modul bietet leistungsstarke kryptografische Funktionen und ist ein wichtiges Werkzeug zum Erstellen sicherer Anwendungen. Durch die ordnungsgemäße Verwendung von Hashing, Verschlüsselung, Signierung und anderen Funktionen können Entwickler die Datensicherheit wirksam schützen. Bei der Verwendung sollten Sie unbedingt bewährte Sicherheitspraktiken befolgen und geeignete Algorithmen und Parameter wählen.
Für komplexere Sicherheitsanforderungen sollten Sie spezielle kryptografische Bibliotheken in Betracht ziehen, wie z. B.bcrypt、argon2usw., die für bestimmte Zwecke optimiert sind.
Integrierte Module in Node.js