Crypto-js pour JavaScript (Node.js) : guide complet avec exemples

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

Crypto-js pour JavaScript (Node.js) : guide complet avec exemples

Dans le développement web moderne, la sécurité des données est un aspect crucial. Qu'il s'agisse de stocker des mots de passe utilisateurs, de transmettre des informations confidentielles sur le réseau ou de protéger des fichiers contre tout accès non autorisé, la cryptographie est au cœur de ces processus. La bibliothèque Crypto-js offre un ensemble puissant et pratique d'algorithmes cryptographiques pour l'écosystème JavaScript, fonctionnant à la fois dans le navigateur et dans l'environnement Node.js.

Cette bibliothèque implémente un large éventail de fonctions cryptographiques standard : le chiffrement symétrique (AES, DES, TripleDES), le hachage (MD5, SHA-1, SHA-256, SHA-512), le calcul HMAC, ainsi que la génération de nombres aléatoires et la gestion des encodages (Base64, Hex, UTF-8). Crypto-js ne dépend d'aucun module natif du système d'exploitation, ce qui en fait un choix idéal pour les applications isomorphes (code fonctionnant à la fois côté client et côté serveur).

Dans cet article, nous allons détailler l'installation de la bibliothèque, les principales méthodes avec des exemples de code, et examiner un cas pratique concret d'utilisation de Crypto-js pour sécuriser des données dans une application web. Ce contenu sera utile aussi bien aux développeurs débutants qu'aux experts souhaitant structurer leurs connaissances sur la cryptographie en JavaScript.

Installation

Pour installer Crypto-js dans un projet Node.js, exécutez la commande suivante dans votre terminal :

npm install crypto-js

Après l'installation, vous pouvez importer la bibliothèque dans votre code :

// Pour Node.js (CommonJS)
const CryptoJS = require("crypto-js");

// Pour ES Modules (si "type": "module" est défini dans package.json)
import CryptoJS from "crypto-js";

Démarrage rapide : exemple minimal fonctionnel

Commençons par un exemple simple : le chiffrement et le déchiffrement d'une chaîne de caractères avec l'algorithme AES :

const CryptoJS = require("crypto-js");

// Message original
const message = "Bonjour, Crypto-js !";

// Clé secrète (doit être robuste dans une application réelle)
const secretKey = "ma-cle-secrete-123";

// Chiffrement
const ciphertext = CryptoJS.AES.encrypt(message, secretKey).toString();
console.log("Message chiffré :", ciphertext);

// Déchiffrement
const bytes = CryptoJS.AES.decrypt(ciphertext, secretKey);
const decryptedMessage = bytes.toString(CryptoJS.enc.Utf8);
console.log("Message déchiffré :", decryptedMessage);

Cet exemple illustre le cycle de base du chiffrement symétrique : nous transformons le texte original en une chaîne chiffrée (Base64), puis nous restaurons le message d'origine à l'aide de la même clé.

Méthodes / fonctions / classes principales

Examinons les fonctionnalités clés de Crypto-js. Pour chaque méthode, nous donnons sa signature, une brève description et un exemple fonctionnel.

1. CryptoJS.AES.encrypt() / CryptoJS.AES.decrypt()

Signature : CryptoJS.AES.encrypt(message, key, [options]) et CryptoJS.AES.decrypt(ciphertext, key, [options])

Fonction : Implémente le chiffrement et le déchiffrement symétrique selon l'algorithme AES (Advanced Encryption Standard). Prend en charge les modes ECB, CBC, CFB, OFB, CTR et les tailles de clé 128/192/256 bits.

const CryptoJS = require("crypto-js");

const message = "Données secrètes";
const key = "superclefsecrete123";

// Chiffrement avec spécification du mode et de l'IV (vecteur d'initialisation)
const iv = CryptoJS.lib.WordArray.random(16); // 16 octets pour AES-128
const encrypted = CryptoJS.AES.encrypt(message, key, {
    iv: iv,
    mode: CryptoJS.mode.CBC,
    padding: CryptoJS.pad.Pkcs7
}).toString();

console.log("Chiffré (CBC) :", encrypted);

// Déchiffrement
const decrypted = CryptoJS.AES.decrypt(encrypted, key, {
    iv: iv,
    mode: CryptoJS.mode.CBC,
    padding: CryptoJS.pad.Pkcs7
}).toString(CryptoJS.enc.Utf8);

console.log("Déchiffré :", decrypted);

Recommendations