Cryptographie en TypeScript : chiffrement et hachage

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 en TypeScript : chiffrement et hachage



Le développement web moderne est impensable sans assurer la sécurité des données. TypeScript, en tant que surcouche fortement typée de JavaScript, offre aux développeurs des outils puissants pour implémenter des algorithmes cryptographiques. Dans cet article, nous examinerons les principales méthodes de chiffrement et de hachage disponibles dans l'écosystème TypeScript, et montrerons comment les appliquer en pratique.



Pourquoi la cryptographie est-elle importante en TypeScript ?



TypeScript est largement utilisé à la fois pour le frontend et le backend (via Node.js). Dans les deux cas, il est nécessaire de protéger les données confidentielles : mots de passe des utilisateurs, jetons d'authentification, contenu des messages. Sans une protection cryptographique adéquate, les données peuvent être interceptées ou compromises.



La cryptographie en TypeScript résout trois problèmes principaux :

  • Confidentialité — chiffrement des données pour empêcher leur lecture par des tiers.
  • Intégrité — garantie que les données n'ont pas été modifiées lors de la transmission.
  • Authentification — vérification de l'authenticité de la source des données.


Principales bibliothèques cryptographiques pour TypeScript



En TypeScript, vous pouvez utiliser à la fois les API intégrées du navigateur et des bibliothèques tierces. Examinons les options les plus populaires :



1. Web Crypto API (intégré au navigateur)

API standard disponible dans les navigateurs modernes et Node.js (à partir de la version 15). Ne nécessite pas l'installation de paquets supplémentaires. Prend en charge AES, RSA, SHA et bien plus.



2. crypto (bibliothèque Node.js)

Module intégré de Node.js offrant un large ensemble de fonctions cryptographiques. Pour TypeScript, l'installation des types est requise : npm install @types/node.



3. bcrypt / bcryptjs

Bibliothèque spécialisée pour le hachage de mots de passe. Recommandée pour le stockage des mots de passe utilisateur grâce à sa protection intégrée par sel.



4. tweetnacl / nacl

Bibliothèque pour le chiffrement à clé publique (NaCl). Se distingue par ses hautes performances et sa simplicité d'utilisation.



Chiffrement des données en TypeScript



Examinons deux principaux types de chiffrement : symétrique (une seule clé) et asymétrique (paire de clés).



Chiffrement symétrique avec AES-GCM

AES (Advanced Encryption Standard) en mode GCM assure à la fois le chiffrement et la vérification de l'intégrité des données. Exemple d'implémentation en TypeScript avec Web Crypto API :



// Fonction de chiffrement AES-GCMasync function encryptAESGCM(  plaintext: string,  password: string): Promise<{ iv: Uint8Array; ciphertext: Uint8Array }> {  const encoder = new TextEncoder();  const keyMaterial = await crypto.subtle.importKey(    'raw',    encoder.encode(password),    'PBKDF2',    false,    ['deriveBits', 'deriveKey']  );

const key = await crypto.subtle.deriveKey( { name: 'PBKDF2', salt: encoder.encode('my-salt'), iterations: 100000, hash: 'SHA-256', }, keyMaterial, { name: 'AES-GCM', length: 256 }, false, ['encrypt'] );

const iv = crypto.getRandomValues(new Uint8Array(12)); const encrypted = await crypto.subtle.encrypt( { name: 'AES-GCM', iv }, key, encoder.encode(plaintext) );

return { iv, ciphertext: new Uint8Array(encrypted), };}

// Exemple d'utilisationconst { iv, ciphertext } = await encryptAESGCM('Message secret', 'mon-mot-de-passe');console.log('Données chiffrées :', ciphertext);


Chiffrement asymétrique avec RSA-OAEP

RSA utilise une paire de clés : une clé publique pour le chiffrement et une clé privée pour le déchiffrement. Exemple de génération de clés et de chiffrement :



// Génération d'une paire de clés RSAasync function generateRSAKeyPair(): Promise<CryptoKeyPair> {  return await crypto.subtle.generateKey(    {      name:                    

Recommendations