ToolActToolAct

Chiffreur/Déchiffreur AES

Chiffrement AES professionnel avec 6 modes et 5 options de remplissage

Configuration du Chiffrement

Entrée
Caractères: 0
Octets: 0
Sortie
Caractères: 0
Octets: 0

Qu'est-ce que le Chiffrement AES?

AES (Advanced Encryption Standard) est l'algorithme de chiffrement symétrique le plus utilisé au monde, approuvé par la NSA pour la protection d'informations TOP SECRET. AES a été développé à partir du chiffre Rijndael conçu par les cryptographes belges Joan Daemen et Vincent Rijmen, et publié officiellement par le NIST en 2001 comme remplacement du DES vieillissant. AES utilise le chiffrement par blocs avec une taille fixe de 128 bits (16 octets) et supporte trois longueurs de clé: 128, 192 et 256 bits. Des clés plus longues offrent une sécurité plus élevée mais une vitesse légèrement inférieure. En tant qu'algorithme symétrique, AES utilise la même clé pour chiffrer et déchiffrer. AES a de nombreuses applications: TLS/SSL pour le web et l'e-mail, BitLocker/FileVault pour le chiffrement de disque, chiffrement de bases de données et sécurité IoT. Cet outil supporte les 6 modes AES (ECB, CBC, CFB, OFB, CTR, GCM) et 5 schémas de remplissage.

Comment utiliser

Mode d'emploi

  1. Sélectionnez le mode de chiffrement (GCM recommandé pour chiffrement et vérification d'intégrité)
  2. Sélectionnez le schéma de remplissage (les modes GCM/CFB/OFB/CTR n'utilisent pas de remplissage)
  3. Sélectionnez la longueur de clé (256 bits pour une sécurité maximale, 128 bits pour les meilleures performances)
  4. Saisissez la clé ou cliquez sur « Générer une clé aléatoire » pour en créer une automatiquement
  5. Pour les modes nécessitant un IV, saisissez ou générez un vecteur d'initialisation
  6. Saisissez le texte clair (chiffrement) ou le texte chiffré (déchiffrement) dans le panneau gauche
  7. Les résultats s'affichent automatiquement dans le panneau de droite
  8. Cliquez sur « Copier » pour copier les résultats, ou sur « Intervertir » pour échanger entrée et sortie

Modes de chiffrement

  • GCMGalois/Counter Mode, recommandé. Fournit chiffrement et authentification, sans remplissage nécessaire, prend en charge le traitement parallèle, idéal pour la transmission réseau et TLS
  • CBCCipher Block Chaining, mode classique. Effectue un XOR entre chaque bloc de texte clair et le bloc chiffré précédent avant chiffrement, nécessite un remplissage et un IV, bonne sécurité mais pas de prise en charge parallèle
  • CFBCipher Feedback, mode de chiffrement par flot. Convertit un chiffrement par bloc en chiffrement par flot, sans remplissage nécessaire, adapté aux flux de données, prend en charge le chiffrement en temps réel
  • OFBOutput Feedback, similaire à CFB mais sans propagation des erreurs, adapté aux canaux bruités, sans remplissage nécessaire
  • CTRMode compteur. Utilise un compteur incrémenté pour générer le flux de clé, sans remplissage, prend en charge le chiffrement entièrement parallèle et offre d'excellentes performances.
  • ECBElectronic Codebook, NON recommandé. Un même texte clair produit un même texte chiffré, ce qui révèle des motifs, adapté uniquement au chiffrement d'un bloc de données isolé

Schémas de remplissage

  • PKCS7Remplissage PKCS#7, le plus courant et recommandé. Ajoute automatiquement N octets de valeur N, retiré avec précision lors du déchiffrement, sans ambiguïté.
  • ZeroPaddingRemplissage par zéros. Remplit avec des octets 0x00, simple mais ambigu lorsque les données se terminent naturellement par des octets nuls
  • NoPaddingAucun remplissage. La longueur des données doit être un multiple exact de 16 octets, adapté aux modes par flot ou aux données de longueur connue
  • ISO7859Remplissage ISO/IEC 7816-4. Premier octet 0x80 suivi d'octets 0x00, largement utilisé dans les cartes à puce et le secteur financier
  • ANSIX923Remplissage ANSI X.923. Tous les octets de remplissage valent 0x00, le dernier indique la longueur du remplissage, courant dans les échanges de données financières

Conseils d'utilisation

  • Générez les clés avec des nombres aléatoires cryptographiquement sûrs et évitez toute chaîne devinable
  • Utilisez un IV aléatoire différent pour chaque chiffrement, ne réutilisez jamais un IV
  • Le mode GCM recommande des IV de 12 octets (96 bits) pour des performances et une sécurité optimales
  • Les modes CTR et GCM prennent en charge le traitement parallèle, accélérant le chiffrement de gros volumes de données
  • Les clés et IV peuvent être saisis en hexadécimal, en texte ou en Base64
  • Longueurs de clé hexadécimales : 128 bits = 32 caractères, 192 bits = 48 caractères, 256 bits = 64 caractères

Cas d’utilisation

Reproduire exactement une intégration AESUtilisez la page lorsqu’un autre système impose une combinaison précise comme AES-256-CBC avec PKCS#7, une clé hexadécimale, un IV en Base64 et un texte chiffré en Base64. Les contrôles séparés pour la clé, l’IV, le format d’entrée et de sortie permettent de reproduire ce contrat sans réécrire de banc de test. Chaque opération — SubBytes, ShiftRows, MixColumns, AddRoundKey — s’exécute localement dans le navigateur via l’implémentation aes-js, de sorte que le texte chiffré ne traverse jamais le réseau et la clé ne quitte pas l’onglet.
Comparer les modes et le remplissage avant de choisirBasculez entre ECB, CBC, CFB, OFB, CTR et GCM, puis testez PKCS#7, ZeroPadding, NoPadding, ISO/IEC 7816-4 ou ANSI X.923 là où le remplissage s’applique. Cela rend visibles les compromis entre modes et remplissage, notamment pourquoi les modes de type flux (CFB, OFB, CTR) n’ont pas besoin de remplissage et pourquoi ECB fuite les motifs. L’exigence d’un IV de 16 octets pour CBC et l’IV recommandé de 12 octets pour GCM peuvent être testées sur le même texte clair.
Générer des exemples sûrs pour la documentationCréez des clés et IV aléatoires dans le format d’affichage courant, chiffrez un texte clair anodin et copiez le résultat en hexadécimal ou Base64 pour des exemples dans un README, des tickets d’API ou des vecteurs de test inter-langages. La clé et le texte clair restant dans l’onglet du navigateur, vous pouvez construire des exemples réalistes sans envoyer de données représentatives via un encodeur distant.
Diagnostiquer un écart avec la sortie d’une autre bibliothèqueLorsque le module crypto de Node, pycryptodome de Python ou javax.crypto de Java produit un texte chiffré qui ne se déchiffre pas sur la page, changez le mode et le remplissage pour correspondre à la spécification, puis vérifiez que la longueur de l’IV, la longueur de la clé et l’encodage d’entrée concordent avant de modifier le code applicatif. Les causes fréquentes incluent AES-CBC avec PKCS#7 vs. ZeroPadding, ou AES-GCM où le service récepteur attend le tag d’authentification de 16 octets concaténé après l’IV et le chiffré plutôt que séparé.
Démontrer la gestion du tag d’authentification GCMChiffrez en GCM, capturez le tag d’authentification de 16 octets que la page ajoute après le texte chiffré, et vérifiez que le service récepteur rejette le chiffré lorsque le tag est tronqué ou réordonné. Les erreurs de gestion du tag se manifestent généralement par un déchiffrement silencieux plutôt que par une exception, aussi le test du comportement AEAD ici permet de les détecter avant l’intégration.

Principe technique

AES (Advanced Encryption Standard) a été publié par le NIST sous le nom FIPS 197 en novembre 2001, après une compétition publique de cinq ans lancée en 1997 avec 15 candidats. Le vainqueur fut Rijndael, conçu par les cryptographes belges Joan Daemen et Vincent Rijmen, devançant les finalistes Twofish, Serpent, RC6 et Mars. AES a remplacé le DES (FIPS 46, retiré en 2005) et est désormais le chiffrement symétrique par blocs le plus déployé au monde : il est intégré dans TLS 1.2/1.3, IPsec, BitLocker, FileVault, le mode par défaut d'OpenSSL `aes-256-gcm`, dm-crypt du noyau Linux, CryptoKit d'Apple et Keystore d'Android. La NSA a approuvé AES-256 pour le niveau TOP SECRET en 2003 (suite A), faisant d'AES le premier chiffrement publiquement disponible autorisé pour le plus haut niveau de classification américain. La taille de bloc est fixée à 128 bits (16 octets) ; les tailles de clé sont 128, 192 ou 256 bits, correspondant respectivement à 10, 12 ou 14 rounds. Un round (sauf le dernier) exécute quatre opérations sur un état de 4x4 octets : SubBytes applique une S-Box fixe de 16x16 (0x63 = 01100011 se trouve à la ligne 6 colonne 3 — la S-Box est construite comme l'inverse multiplicatif dans GF(2^8) plus une transformation affine pour briser la structure algébrique) ; ShiftRows décale la ligne 0 de 0, la ligne 1 de 1, la ligne 2 de 2 et la ligne 3 de 3 octets ; MixColumns multiplie chaque colonne par une matrice MDS circulante fixe sur GF(2^8) (le polynôme 0x03 * x sous forme matricielle) ; AddRoundKey applique un XOR avec la sous-clé du round. Le dernier round saute MixColumns. Les clés de round proviennent du calendrier de clés Rijndael : 11/13/15 clés de round de 128 bits chacune, générées via RotWord (rotation gauche d'1 octet), SubWord (application de la S-Box) et XOR avec Rcon[i] = [0x01, 0x02, 0x04, ..., 0x80, 0x1b, 0x36] *2^(i-1) sur GF(2^8). La bibliothèque `aes-js` de la page effectue les quatre étapes en JavaScript pur et est compatible au niveau des octets avec la libcrypto d'OpenSSL. Cinq modes de bloc sont exposés. ECB chiffre chaque bloc de 16 octets indépendamment : des blocs de texte clair identiques produisent des blocs chiffrés identiques, révélant la structure (la fameuse image du pingouin ECB survit au chiffrement car le motif de pixels est préservé). CBC effectue un XOR entre chaque bloc de texte clair et le bloc chiffré précédent avant chiffrement ; le premier bloc est XORé avec un IV. CTR transforme AES en chiffrement par flot en chiffrant un compteur incrémenté (nonce || compteur, les deux moitiés de 64 bits d'un bloc de 128 bits) et en XORant le flux de clé avec le texte clair — il supporte l'accès aléatoire et le chiffrement parallèle. GCM est CTR plus GHASH (un authentificateur à hachage universel sur GF(2^128)), produisant un tag d'authentification de 16 octets ajouté après le texte chiffré. GCM est le mode AEAD par défaut dans TLS 1.3 (RFC 8446) et dans la plupart des API modernes (Node `crypto.createCipheriv('aes-256-gcm', ...)`). CFB et OFB sont des modes de chiffrement par flot plus anciens conservés pour la compatibilité. Le piège de l'IV est le bug de production le plus courant. GCM avec un IV de 96 bits (12 octets) est la configuration recommandée par le NIST (RFC 5288, NIST SP 800-38D §5.2.1.1) : l'IV de 12 octets est traité comme un compteur et GHASH est calculé sur J0 = IV || 0x00000001. La réutilisation d'un IV sous la même clé en mode CTR fuite le XOR des textes clairs (C1 XOR C2 = P1 XOR P2 — une seule attaque à texte clair choisi permet de récupérer les deux messages). La réutilisation d'un IV en GCM est pire : un attaquant peut récupérer la sous-clé d'authentification H et forger des tags pour des messages arbitraires (l'attaque décrite par Joux en 2006 est la raison pour laquelle le NIST a interdit les IV aléatoires de 96 bits sans stricte unicité). La page génère des IV de 12 octets avec `crypto.getRandomValues(new Uint8Array(12))` pour GCM et des IV de 16 octets pour CBC/CFB/OFB, et le bouton de clé aléatoire utilise le même CSPRNG afin que chaque chiffrement débute avec du matériel frais. Cet outil exécute le chiffrement et le déchiffrement AES entièrement dans le navigateur via aes-js (implémentation AES en JavaScript pur). Il n'y a pas de bascule vers Web Crypto / SubtleCrypto : toutes les opérations passent par aes-js quelle que soit la taille des données.

  • AES est le FIPS 197 (2001), sélectionné lors d'une compétition ouverte du NIST ayant attiré 15 candidats ; Rijndael a battu Twofish, Serpent, RC6 et Mars. La taille de bloc est toujours de 128 bits ; les tailles de clé 128/192/256 bits exécutent 10/12/14 rounds. La page prend en charge les trois via les constructeurs AES_128, AES_192 et AES_256 de aes-js.
  • La fonction de round en quatre étapes : SubBytes (une S-Box de 256 octets qui est l'inverse dans GF(2^8) plus une transformation affine), ShiftRows (lignes décalées de 0/1/2/3 octets), MixColumns (multiplication matricielle MDS sur GF(2^8) avec le polynôme 0x03), AddRoundKey (XOR avec la clé de round). Le dernier round saute MixColumns. Même algorithme, même clé = même chiffré — AES est déterministe.
  • ECB n'est pas sûr car des blocs de texte clair identiques produisent des blocs chiffrés identiques (la fameuse image du « pingouin ECB » conserve sa silhouette). CBC est le mode classique sûr ; CTR ajoute le parallélisme ; GCM ajoute l'authentification et est le mode par défaut de TLS 1.3 (RFC 8446). CFB et OFB sont des modes de chiffrement par flot conservés pour la compatibilité avec les anciens systèmes.
  • Remplissage PKCS#7 : 1 octet manquant → 15 octets de 0x0f + 1 octet de 0x10 ; 2 octets manquants → 14 de 0x0e + 2 de 0x0f, etc. La valeur du dernier octet indique la longueur du remplissage, donc le retrait est sans ambiguïté. Les modes par flot (CTR/CFB/OFB/GCM) sautent entièrement le remplissage. ZeroPadding est ambigu lorsque les données se terminent par 0x00 — ne l'utilisez pas.
  • GCM est un mode AEAD : texte chiffré plus un tag d'authentification de 16 octets, calculé via GHASH sur GF(2^128) en utilisant H = AES_K(0^128). Les AAD (données additionnelles authentifiées) couvrent les en-têtes sans les chiffrer. L'IV de 96 bits (RFC 5288) est traité comme un compteur ; les IV de 128 bits passent par un GHASH pour dériver J0 — même sécurité, légèrement plus lent.
  • La réutilisation d'un IV est catastrophique. La réutilisation d'un IV en CTR fuite P1 XOR P2 (double utilisation du masque). La réutilisation d'un IV en GCM (Joux 2006) permet à un attaquant de récupérer H et de forger des tags. La page génère des IV avec `crypto.getRandomValues` (un CSPRNG), ne les réutilise jamais dans une session et préfixe l'IV au texte chiffré pour que le côté déchiffrement puisse le récupérer sans état hors bande.
  • Génération de clé AES : le bouton de clé aléatoire utilise `crypto.getRandomValues` (CSPRNG du navigateur). Les rounds AES sont calculés via aes-js, une implémentation JavaScript pure compatible octet par octet avec libcrypto d'OpenSSL pour les mêmes paramètres de clé, IV et padding.
  • Réalité des canaux auxiliaires : l'AES en JavaScript pur n'est pas à temps constant (l'indexage dans le tableau S-Box fuite le timing). L'AES de Web Crypto s'exécute en code natif et est à temps constant. Pour les charges de travail sensibles (HSM, KDF côté serveur), préférez le chemin natif ; pour un outil d'apprentissage dans le navigateur, aes-js convient car l'entrée est déjà en mémoire dans la page. Chemin de migration : SHA-1 → SHA-256 pour les hachages, DES → AES pour les chiffrements, ECB → GCM pour les modes.

Exemples

Chiffrement AES-128-CBC

Texte clair : Hello, World!
Clé :         0123456789abcdef0123456789abcdef (32 hex = 128 bits)
IV:           fedcba9876543210fedcba9876543210 (32 hex = 128 bits)
Mode :        CBC / PKCS#7 / 128 bits

La page produit le texte chiffré (Base64 et Hex) dans le panneau
de sortie. Cliquez sur « Copier » pour récupérer la valeur, ou
« Inverser » pour le déchiffrer. Le remplissage PKCS#7 ajoute 3
octets (0x03 0x03 0x03) afin que le texte clair complété remplisse
un bloc AES.

FIPS : FIPS 197 définit AES ; NIST SP 800-38A définit le mode CBC

Chiffrement authentifié AES-256-GCM

Texte clair : charge utile de données sensibles
Clé :         6f8a3b2c1d9e7f5a4b8c0d2e1f3a5b7c9d1e3f5a7b9c1d3e5f7a9b1c3d5e7f9a (64 hex = 256 bits)
IV:           1a2b3c4d5e6f708192a3b4c5 (24 hex = 12 octets, longueur recommandée pour GCM)
Mode :        GCM / NoPadding / 256 bits / AAD vide

Format de sortie : IV (12 o) || Texte chiffré || AuthTag (16 o)

FIPS : NIST SP 800-38D définit le mode GCM ; l'IV de 96 bits est traité comme un compteur

AES-128-ECB (vecteur de test FIPS 197 Annexe B)

Clé :         2b7e151628aed2a6abf7158809cf4f3c (128 bits)
Texte clair : 3243f6a8885a308d313198a2e0370734
Ciphertext (Hex): 3925841d02dc09fbdc118597196a0b32

Mode : ECB / 128 bits

Note : ECB chiffre chaque bloc de 16 octets indépendamment. Des
blocs de texte clair identiques produisent toujours des blocs
chiffrés identiques.
FIPS : FIPS 197 Annexe B fournit ce vecteur de test canonique

Comparaison de sécurité des modes AES

ECB : Pas d'IV, déterministe, révèle les motifs - NE JAMAIS utiliser en production
CBC : IV aléatoire, déchiffrement parallèle uniquement, nécessite HMAC pour l'intégrité
CTR : IV compteur, chiffrement/déchiffrement parallèles, nécessite un MAC
GCM : IV aléatoire, parallélisable, balise d'authentification intégrée

Pour les nouveaux systèmes, préférez AES-256-GCM :
- Une clé de 256 bits résiste aux attaques quantiques (algorithme de Grover)
- GCM offre confidentialité et intégrité en une seule opération
- TLS 1.3 impose des chiffrements AEAD comme AES-GCM

NIST : NIST SP 800-38A/D documente tous ces modes

FAQ

Qu'est-ce que l'AES et quelles tailles de clé sont prises en charge ?

AES (Advanced Encryption Standard, FIPS 197) est le chiffrement symétrique qui protège la majorité des connexions HTTPS modernes, du Wi-Fi WPA2 et du chiffrement de disque. La page prend en charge les clés de 128, 192 et 256 bits. AES-128 est rapide et sûr pour quasiment tous les usages ; ne choisissez AES-256 que si vous avez besoin d'une résistance à long terme face à la future cryptanalyse quantique.

Quel mode utiliser : ECB, CBC, CFB, OFB, CTR ou GCM ?

ECB n'est pas sûr en dehors des vecteurs de test à un seul bloc (il laisse fuir les motifs des données). CBC et CTR n'assurent que la confidentialité et nécessitent un MAC séparé. GCM est la valeur par défaut moderne : il authentifie le texte chiffré en plus de le chiffrer, et c'est ce qu'utilise HTTPS. Choisissez GCM, sauf si vous devez interopérer avec un système hérité.

Quel padding dois-je utiliser ?

PKCS#7 (aussi appelé PKCS#5) est le padding standard pour les modes ECB et CBC. CTR, CFB, OFB et GCM sont des modes de type flux qui n'ont pas besoin de padding ; la page impose « NoPadding » dans ces cas. Si le déchiffrement échoue avec « bad padding », la cause la plus fréquente est une clé, un IV ou un réglage de padding différent entre les deux extrémités.

Pourquoi le même texte produit-il un texte chiffré différent à chaque fois ?

Les modes autres qu'ECB utilisent un IV (vecteur d'initialisation) qui doit être aléatoire pour chaque chiffrement. Même texte clair + même clé + IV différent → texte chiffré différent. L'IV n'est pas secret : on le préfixe au texte chiffré. En revanche, réutiliser un IV avec la même clé en mode CTR ou GCM est catastrophique et casse le chiffrement.

L'AES est-il résistant au quantique ?

La sécurité effective d'AES-128 tombe à environ 64 bits face à l'algorithme de Grover sur un ordinateur quantique suffisamment grand ; AES-256 tombe à 128 bits. AES-256 est donc le choix prudent pour des données qui doivent rester secrètes pendant des décennies. AES symétrique est bien moins affecté par le quantique que RSA/ECC.

Le chiffrement est-il effectué dans mon navigateur ?

Oui. La page utilise la bibliothèque aes-js (implémentation AES en JavaScript pur) qui s'exécute localement dans votre navigateur. Le texte clair, les clés et les IV ne quittent jamais l'appareil. Vous pouvez le vérifier dans l'onglet Réseau.

Comment partager une clé en toute sécurité ?

Ne collez jamais une vraie clé de production sur une page web, y compris celle-ci. Considérez cet outil comme un support pédagogique et un moyen de valider des vecteurs de test. Pour un échange de clés réel, utilisez un schéma asymétrique (RSA-OAEP, ECDH/X25519), une clé dérivée d'un mot de passe avec PBKDF2/Argon2 et un sel, ou un KMS géré, et surtout pas « j'envoie la clé sur le chat ».