À l’ère numérique d’aujourd’hui, la sécurisation des informations sensibles telles que les clés API, les mots de passe et les données utilisateur est plus critique que jamais. Une stratégie robuste de cryptage et de déchiffrement peut empêcher tout accès non autorisé et garantir la confidentialité des données. Dans cet article de blog, nous explorerons comment chiffrer et déchiffrer du texte à l'aide de JavaScript Vanilla, en tirant parti de l'API Web Crypto pour une approche moderne et sécurisée.
Le cryptage transforme les données lisibles (texte en clair) en un format brouillé (texte chiffré) qui ne peut être lu que s'il est déchiffré avec la bonne clé. Cela garantit que même si quelqu’un intercepte les données cryptées, celles-ci n’auront aucun sens sans la clé. Un mécanisme de cryptage solide protège :
Voyons comment vous pouvez implémenter cela en toute sécurité dans JavaScript.
Nous utiliserons AES-GCM (Advanced Encryption Standard - Galois/Counter Mode), une norme moderne qui fournit à la fois le cryptage et la vérification de l'intégrité. Les étapes impliquent :
Voici l'implémentation complète de JavaScript.
Nous effectuerons la conversion entre ArrayBuffer et hexadécimal pour faciliter le stockage et la récupération des données :
function arrayBufferToHex(buffer) { return [...new Uint8Array(buffer)] .map(byte => byte.toString(16).padStart(2, '0')) .join(''); } function hexToArrayBuffer(hex) { const bytes = new Uint8Array(hex.length / 2); for (let i = 0; i < hex.length; i += 2) { bytes[i / 2] = parseInt(hex.substr(i, 2), 16); } return bytes.buffer; }
Utilisez PBKDF2 pour dériver une clé de cryptage forte :
async function getCryptoKey(password) { const encoder = new TextEncoder(); const keyMaterial = encoder.encode(password); return crypto.subtle.importKey( 'raw', keyMaterial, { name: 'PBKDF2' }, false, ['deriveKey'] ); } async function deriveKey(password, salt) { const keyMaterial = await getCryptoKey(password); return crypto.subtle.deriveKey( { name: 'PBKDF2', salt: salt, iterations: 100000, hash: 'SHA-256' }, keyMaterial, { name: 'AES-GCM', length: 256 }, false, ['encrypt', 'decrypt'] ); }
Crypter le texte avec un mot de passe :
async function encryptText(text, password) { const encoder = new TextEncoder(); const salt = crypto.getRandomValues(new Uint8Array(16)); const iv = crypto.getRandomValues(new Uint8Array(12)); const key = await deriveKey(password, salt); const encrypted = await crypto.subtle.encrypt( { name: 'AES-GCM', iv: iv }, key, encoder.encode(text) ); return { cipherText: arrayBufferToHex(encrypted), iv: arrayBufferToHex(iv), salt: arrayBufferToHex(salt) }; }
Déchiffrez le texte avec le même mot de passe :
async function decryptText(encryptedData, password) { const { cipherText, iv, salt } = encryptedData; const key = await deriveKey(password, hexToArrayBuffer(salt)); const decrypted = await crypto.subtle.decrypt( { name: 'AES-GCM', iv: hexToArrayBuffer(iv) }, key, hexToArrayBuffer(cipherText) ); const decoder = new TextDecoder(); return decoder.decode(decrypted); }
Voyons comment utiliser ces fonctions :
function arrayBufferToHex(buffer) { return [...new Uint8Array(buffer)] .map(byte => byte.toString(16).padStart(2, '0')) .join(''); } function hexToArrayBuffer(hex) { const bytes = new Uint8Array(hex.length / 2); for (let i = 0; i < hex.length; i += 2) { bytes[i / 2] = parseInt(hex.substr(i, 2), 16); } return bytes.buffer; }
Le chiffrement des informations sensibles comme les clés API est une étape fondamentale dans la sécurisation de vos applications. Je l'utilise principalement pour les clés API.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!