Node.js crypto-Modul

Java FileIntegrierte Module in Node.js


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

const crypto = require('crypto');

// 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 crypto = require('crypto');

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

const crypto = require('crypto');

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

const crypto = require('crypto');

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

const crypto = require('crypto');

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

const crypto = require('crypto');

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

  1. Schlüsselverwaltung: Schlüssel niemals im Code fest verdrahten; verwenden Sie Umgebungsvariablen oder ein Schlüsselverwaltungssystem.
  2. Algorithmusauswahl: Vermeiden Sie die Verwendung bekannter unsicherer Algorithmen wie MD5 und SHA1.
  3. **Initialisierungsvektor (IV)**: Bei symmetrischer Verschlüsselung sollte für jede Verschlüsselung ein anderer IV verwendet werden.
  4. Kryptografische Parameter: Verwenden Sie ausreichend lange Schlüssellängen (z. B. AES-256 statt AES-128).

Praktische Anwendungsszenarien

  1. Passwortspeicherung: Verwenden Sie Hash-Algorithmen, um Benutzerpasswörter zu speichern
  2. Verschlüsselung der Datenübertragung: Schützen Sie Daten bei der Netzwerkübertragung
  3. API-Signaturüberprüfung: Stellen Sie die Integrität von API-Anfragen sicher
  4. JWT-Token: JSON Web Tokens generieren und verifizieren
  5. 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.

Java FileIntegrierte Module in Node.js

Andere Erweiterungen