Cryptographie dans Node.js : chiffrement et hachage avec crypto

Formateur Python en ligne pour débutants

Apprenez Python facilement sans surcharge théorique. Résolvez des tâches pratiques avec vérification automatique et écrivez du code directement dans le navigateur.

Start Course

Cryptographie dans Node.js : le module intégré crypto



Dans le développement web moderne, la sécurité des données est un aspect crucial. Node.js fournit un module intégré puissant et flexible crypto, qui implémente un large éventail de fonctions cryptographiques. Ce module ne nécessite pas l'installation de paquets supplémentaires et permet de résoudre des tâches de hachage, de chiffrement symétrique et asymétrique, de création de signatures numériques et de HMAC (Hash-based Message Authentication Code).



Dans cet article, nous allons détailler les principales fonctionnalités de crypto et fournir des exemples de code pratiques.



Principales fonctionnalités du module crypto



  • Hachage — transformation de données de longueur arbitraire en une chaîne de longueur fixe (SHA-256, SHA-512, MD5).
  • Chiffrement symétrique — chiffrement et déchiffrement avec une seule clé secrète (AES-256-CBC, AES-192-GCM).
  • Chiffrement asymétrique — chiffrement avec une paire de clés (publique/privée) basé sur RSA ou ECDH.
  • HMAC — hachage avec une clé secrète pour vérifier l'intégrité et l'authenticité d'un message.
  • Signatures numériques — création et vérification de signatures pour confirmer la paternité.


Importation du module



Le module crypto est intégré dans Node.js, donc son importation se fait de manière standard :



const crypto = require('crypto');


Exemple 1 : Hachage de données (SHA-256)



Le hachage est une fonction unidirectionnelle souvent utilisée pour stocker des mots de passe et vérifier l'intégrité des fichiers.



const data = 'PythonLib — portail éducatif';

// Création d'un hachage SHA-256const hash = crypto.createHash('sha256');hash.update(data);const hexHash = hash.digest('hex');

console.log('Données originales :', data);console.log('Hachage SHA-256 :', hexHash);// Sortie : Hachage SHA-256 : b5a1... (64 caractères)


Important : Pour stocker des mots de passe, n'utilisez pas un simple hachage, mais une fonction avec « sel » — par exemple, crypto.scryptSync() ou pbkdf2Sync().



Exemple 2 : Hachage de mot de passe avec sel (scrypt)



const password = 'MySecurePassword123';

// Génération d'un sel aléatoireconst salt = crypto.randomBytes(16).toString('hex');

// Création d'un hachage avec sel (scrypt)const hash = crypto.scryptSync(password, salt, 64).toString('hex');

console.log('Sel :', salt);console.log('Hachage du mot de passe :', hash);

// Pour vérifier, utilisez le même sel et comparez les hachagesconst isMatch = crypto.scryptSync(password, salt, 64).toString('hex') === hash;console.log('Mot de passe correspond :', isMatch); // true


Exemple 3 : Chiffrement symétrique AES-256-CBC



Le chiffrement symétrique utilise une seule clé pour le chiffrement et le déchiffrement. L'algorithme AES-256-CBC nécessite également un vecteur d'initialisation (IV).



// Fonction de chiffrementfunction encrypt(text, key) {    const iv = crypto.randomBytes(16); // Génération de l'IV    const cipher = crypto.createCipheriv('aes-256-cbc', key, iv);    let encrypted = cipher.update(text, 'utf8', 'hex');    encrypted += cipher.final('hex');    return { iv: iv.toString('hex'), encrypted };}

// Fonction de déchiffrementfunction decrypt(encrypted, key, ivHex) { const iv = Buffer.from(ivHex, 'hex'); const decipher = crypto.createDecipheriv('aes-256-cbc', key, iv); let decrypted = decipher.update(encrypted, 'hex', 'utf8'); decrypted += decipher.final('utf8'); return decrypted;}

// Utilisationconst key = crypto.randomBytes(32); // Clé de 256 bitsconst secretMessage = 'Données secrètes pour PythonLib';

const encryptedData = encrypt(secretMessage, key);console.log('Chiffré :', encryptedData.encrypted);console.log('IV :', encryptedData.iv);

const decryptedMessage = decrypt(encryptedDa

Recommendations