Cryptographie en TypeScript : chiffrement et hachage de données
Dans le développement web moderne, la sécurité des données est un aspect crucial. TypeScript, en tant que surcouche fortement typée de JavaScript, offre des outils puissants pour implémenter des opérations cryptographiques. Dans cet article, nous examinerons les principaux algorithmes de chiffrement et de hachage disponibles en TypeScript, et montrerons comment les appliquer en pratique.
Module crypto intégré et bibliothèques
Node.js fournit le module intégré crypto, qui est entièrement compatible avec TypeScript. Pour les applications navigateur, on utilise l'API Web Crypto. Pour des tâches plus complexes, la bibliothèque crypto-js est recommandée, car elle fonctionne à la fois dans Node.js et dans le navigateur.
Installation des paquets nécessaires :
npm install crypto-jsnpm install @types/crypto-js --save-devChiffrement symétrique AES
L'algorithme AES (Advanced Encryption Standard) est le chiffrement symétrique le plus populaire. Il utilise la même clé pour chiffrer et déchiffrer les données.
Exemple d'implémentation AES-256 en TypeScript :
import CryptoJS from 'crypto-js';
const SECRET_KEY = 'my-strong-secret-key-32chars';
function encryptAES(text: string): string { const encrypted = CryptoJS.AES.encrypt(text, SECRET_KEY); return encrypted.toString();}
function decryptAES(ciphertext: string): string { const decrypted = CryptoJS.AES.decrypt(ciphertext, SECRET_KEY); return decrypted.toString(CryptoJS.enc.Utf8);}
// Utilisationconst originalText = 'Секретные данные для защиты';const encrypted = encryptAES(originalText);console.log('Зашифровано:', encrypted);
const decrypted = decryptAES(encrypted);console.log('Расшифровано:', decrypted);Chiffrement asymétrique RSA
RSA 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 idéal pour la transmission sécurisée de données.
Exemple avec le module crypto de Node.js :
import * as crypto from 'crypto';
function generateRSAKeys(): { publicKey: string; privateKey: string } { const { publicKey, privateKey } = crypto.generateKeyPairSync('rsa', { modulusLength: 2048, publicKeyEncoding: { type: 'spki', format: 'pem' }, privateKeyEncoding: { type: 'pkcs8', format: 'pem' } }); return { publicKey, privateKey };}
function encryptRSA(plainText: string, publicKey: string): string { const buffer = Buffer.from(plainText, 'utf-8'); const encrypted = crypto.publicEncrypt(publicKey, buffer); return encrypted.toString('base64');}
function decryptRSA(cipherText: string, privateKey: string): string { const buffer = Buffer.from(cipherText, 'base64'); const decrypted = crypto.privateDecrypt(privateKey, buffer); return decrypted.toString('utf-8');}
// Exemple d'utilisationconst keys = generateRSAKeys();const message = 'Конфиденциальное сообщение';const encryptedRSA = encryptRSA(message, keys.publicKey);const decryptedRSA = decryptRSA(encryptedRSA, keys.privateKey);
console.log('Исходное:', message);console.log('Расшифрованное:', decryptedRSA);Hachage de données
Le hachage est une transformation unidirectionnelle de données en une chaîne de longueur fixe. Contrairement au chiffrement, un hachage ne peut pas être inversé. Principales utilisations :
- Stockage de mots de passe — on stocke le hachage au lieu du mot de passe
- Vérification de l'intégrité des données — comparaison des hachages de fichiers
- Signatures numériques — confirmation de la paternité
SHA-256
L'algorithme le plus courant de la famille SHA-2 :
import CryptoJS from 'crypto-js';
function hashSHA256(data: string): string { return CryptoJS.SHA256(data).toString();}
Aussi dans la bibliothèque
Travailler avec les images en Rust : la bibliothèque image et bien plus
Utilisation de GraphQL en Swift : bibliothèques Apollo et Relay pour iOS/macOS
Regex Rust : guide complet avec exemples pratiques
Validation des données en Kotlin : bibliothèques et approches
Traitement JSON en Swift : Codable, JSONSerialization et exemples pratiques