Module crypto de Node.js

Java FileModules intégrés de Node.js


de Node.jscryptoLe module est un module intégré qui fournit des fonctionnalités cryptographiques, y compris des encapsulations pour les fonctions de hachage, HMAC, chiffrement, déchiffrement, signature et vérification d'OpenSSL. Il permet aux développeurs d'effectuer diverses opérations cryptographiques dans des applications Node.js.


Fonctions principales

Algorithme de hachage

Un algorithme de hachage est une fonction à sens unique qui convertit une entrée de n'importe quelle longueur en une sortie de longueur fixe.cryptoLe module prend en charge plusieurs algorithmes de hachage, tels que SHA-256, MD5, etc.

Exemple

const crypto = require('crypto');

// Créer un hachage SHA-256
const hash = crypto.createHash('sha256');
hash.update('Hello World');
console.log(hash.digest('hex'));
// Sortie : a591a6d40bf420404a011733cfb7b190d62c65bf0bcda32b57b277d9ad9f146

HMAC (code d'authentification de message par hachage à clé)

HMAC est un mécanisme d'authentification de message qui utilise une fonction de hachage cryptographique combinée à une clé secrète.

Exemple

const crypto = require('crypto');

const secret = 'mysecret';
const hmac = crypto.createHmac('sha256', secret);
hmac.update('Hello World');
console.log(hmac.digest('hex'));
// Sortie : 9b8e8b0e3b9e9b1a3b9e9b1a3b9e9b1a3b9e9b1a3b9e9b1a3b9e9b1a3b9e9b1a

Chiffrement et déchiffrement

Chiffrement symétrique

Le chiffrement symétrique utilise la même clé pour le chiffrement et le déchiffrement.cryptoLe module prend en charge des algorithmes tels que AES et DES.

Exemple

const crypto = require('crypto');

// Chiffrer
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('Bonjour le monde', 'utf8', 'hex');
encrypted += cipher.final('hex');
console.log(encrypted);

// Déchiffrer
const decipher = crypto.createDecipheriv(algorithm, key, iv);
let decrypted = decipher.update(encrypted, 'hex', 'utf8');
decrypted += decipher.final('utf8');
console.log(decrypted);

Chiffrement asymétrique

Le chiffrement asymétrique utilise une paire de clés publique/privée ; la clé publique est utilisée pour le chiffrement, et la clé privée est utilisée pour le déchiffrement.

Exemple

const crypto = require('crypto');

// Générer une paire de clés
const { publicKey, privateKey } = crypto.generateKeyPairSync('rsa', {
  modulusLength: 2048,
});

// Chiffrer
const encryptedData = crypto.publicEncrypt(
  publicKey,
  Buffer.from('Hello World')
);
console.log(encryptedData.toString('base64'));

// Déchiffrer
const decryptedData = crypto.privateDecrypt(
  privateKey,
  encryptedData
);
console.log(decryptedData.toString());

Signature numérique et vérification

Les signatures numériques sont utilisées pour vérifier l'intégrité et l'origine des données.

Exemple

const crypto = require('crypto');

// Générer une paire de clés
const { privateKey, publicKey } = crypto.generateKeyPairSync('rsa', {
  modulusLength: 2048,
});

// Créer une signature
const sign = crypto.createSign('SHA256');
sign.update('some data to sign');
const signature = sign.sign(privateKey, 'hex');
console.log(signature);

// Vérifier la signature
const verify = crypto.createVerify('SHA256');
verify.update('des données à signer');
console.log(verify.verify(publicKey, signature, 'hex'));
// Sortie : true

Génération de nombres aléatoires

cryptoLe module fournit des méthodes pour générer des nombres aléatoires cryptographiquement sûrs.

Exemple

const crypto = require('crypto');

// Générer 16 octets de données aléatoires
const randomBytes = crypto.randomBytes(16);
console.log(randomBytes.toString('hex'));

// Générer un entier aléatoire
const randomInt = crypto.randomInt(1, 100);
console.log(randomInt);

Considérations de sécurité

  1. Gestion des clés: Ne jamais coder en dur les clés dans le code ; utilisez des variables d'environnement ou un système de gestion des clés.
  2. Sélection de l'algorithme: Évitez d'utiliser des algorithmes reconnus comme non sécurisés tels que MD5 et SHA1.
  3. **Vecteur d'initialisation (IV)** : Pour le chiffrement symétrique, un IV différent doit être utilisé pour chaque chiffrement.
  4. Paramètres cryptographiques: Utilisez des longueurs de clé suffisamment grandes (par ex., AES-256 au lieu d'AES-128).

Scénarios d'application pratiques

  1. Stockage des mots de passe: Utilisez des algorithmes de hachage pour stocker les mots de passe des utilisateurs
  2. Chiffrement de la transmission des données: Protégez les données lors de leur transmission sur le réseau
  3. Vérification de signature d'API: Garantissez l'intégrité des requêtes API
  4. Jetons JWT: Générez et vérifiez les JSON Web Tokens
  5. Vérification de l'intégrité des fichiers: Vérifiez le hachage des fichiers téléchargés

Résumé

de Node.jscryptoLe module fournit de puissantes fonctions cryptographiques et constitue un outil important pour créer des applications sécurisées. En utilisant correctement le hachage, le chiffrement, la signature et d'autres fonctionnalités, les développeurs peuvent protéger efficacement la sécurité des données. Lors de son utilisation, veillez à suivre les bonnes pratiques de sécurité et à choisir des algorithmes et des paramètres appropriés.

Pour des besoins de sécurité plus complexes, envisagez d'utiliser des bibliothèques cryptographiques dédiées telles quebcrypt、argon2etc., qui sont optimisées pour des usages spécifiques.

Java FileModules intégrés de Node.js

Autres extensions