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 : chiffrement et hachage avec le module crypto



La sécurité des données est l’un des aspects clés du développement web moderne. Dans Node.js, le module intégré crypto fournit des outils puissants pour la protection cryptographique : du hachage des mots de passe au chiffrement asymétrique. Dans cet article, nous allons détailler les principales fonctions du module crypto, apprendre à chiffrer et déchiffrer des données, ainsi qu’à stocker les mots de passe en toute sécurité grâce au hachage.



1. Importation du module crypto

Le module crypto est intégré, il ne nécessite donc pas l’installation de paquets supplémentaires. Il s’importe de manière standard :

const crypto = require('crypto');


2. Hachage des données

Le hachage est le processus de transformation de données de longueur variable en une chaîne de longueur fixe. Contrairement au chiffrement, une fonction de hachage est irréversible. Les algorithmes les plus populaires sont SHA-256 et SHA-512.



Exemple : hachage d’une chaîne avec SHA-256

const data = 'PythonLib — votre guide dans le monde de l\'informatique';const hash = crypto.createHash('sha256').update(data).digest('hex');console.log('SHA-256 hash :', hash);


Exemple : hachage avec sel (bcrypt)

Pour stocker les mots de passe en toute sécurité, il est recommandé d’utiliser l’algorithme bcrypt ou scrypt. Node.js prend en charge nativement scrypt :

const password = 'mySuperPassword123';const salt = crypto.randomBytes(16).toString('hex');

crypto.scrypt(password, salt, 64, (err, derivedKey) => { if (err) throw err; console.log('Hash du mot de passe :', derivedKey.toString('hex'));});


3. Chiffrement symétrique (AES)

Le chiffrement symétrique utilise la même clé pour chiffrer et déchiffrer les données. L’algorithme le plus courant est AES (Advanced Encryption Standard).



Chiffrement des données avec AES-256-CBC

const algorithm = 'aes-256-cbc';const key = crypto.randomBytes(32); // clé de 256 bitsconst iv = crypto.randomBytes(16);  // vecteur d’initialisation

function encrypt(text) { const cipher = crypto.createCipheriv(algorithm, key, iv); let encrypted = cipher.update(text, 'utf8', 'hex'); encrypted += cipher.final('hex'); return { iv: iv.toString('hex'), encryptedData: encrypted };}

const originalText = 'Données secrètes pour PythonLib';const encrypted = encrypt(originalText);console.log('Données chiffrées :', encrypted);


Déchiffrement des données

function decrypt(encryptedObj) {  const decipher = crypto.createDecipheriv(    algorithm,    key,    Buffer.from(encryptedObj.iv, 'hex')  );  let decrypted = decipher.update(encryptedObj.encryptedData, 'hex', 'utf8');  decrypted += decipher.final('utf8');  return decrypted;}

const decryptedText = decrypt(encrypted);console.log('Texte déchiffré :', decryptedText);


4. Chiffrement asymétrique (RSA)

Le chiffrement asymétrique utilise une paire de clés : une clé publique et une clé privée. La clé publique sert à chiffrer les données, et la clé privée à les déchiffrer. C’est la base de HTTPS et des signatures numériques.



Génération d’une paire de clés RSA

const { generateKeyPairSync } = require('crypto');

const { publicKey, privateKey } = generateKeyPairSync('rsa', { modulusLength: 2048, publicKeyEncoding: { type: 'spki', format: 'pem' }, privateKeyEncoding: { type: 'pkcs8', format: 'pem' }});

console.log('Clé publique :', publicKey);console.log('Clé privée :', privateKey);


Chiffrement et déchiffrement avec RSA

const secretMessage = 'Bonjour, PythonLib!';

// Chiffrement avec la clé publiqueconst encryptedData = crypto.publicEncrypt( { key: publicKey, padding: crypto.constants.RSA_PKCS1_OAEP_PADDING }, Buffer.from(secretMessage));console.log('Données chiffrées

Recommendations