Chiffrement symétrique AES
Chiffrez et déchiffrez des données sensibles avec AES/CBC/PKCS5Padding en utilisant l’API javax.crypto de Java.
Chiffrement symétrique AES est une leçon Java Academy gratuite sur CoddyKit. Ceci est la leçon 2 sur 4. Tu peux lire la leçon complète ci-dessous gratuitement — puis la pratiquer en direct dans le navigateur avec un éditeur de code intégré et un tuteur IA 24/7. Elle fait partie du parcours d'apprentissage Java Academy, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours Java Academy comprend 4 leçons au total.
Chiffrement symétrique ou asymétrique
Le chiffrement symétrique utilise la même clé pour chiffrer et déchiffrer : il est rapide et adapté aux gros volumes de données. Le chiffrement asymétrique utilise une paire de clés publique/privée : il est plus lent et sert à l’échange de clés ainsi qu’aux signatures. AES est le chiffrement symétrique standard.
Modes AES : CBC ou GCM
AES dispose de plusieurs modes. AES/CBC/PKCS5Padding est courant, mais ne fournit pas d’authentification. AES/GCM/NoPadding fournit à la fois le chiffrement et l’authentification (AEAD) — il est fortement recommandé pour le nouveau code.
Générer une clé AES
Utilisez KeyGenerator pour générer de manière sécurisée une clé AES de 256 bits.
KeyGenerator kg = KeyGenerator.getInstance("AES");
kg.init(256); // 256-bit key
SecretKey key = kg.generateKey();
// Persist the key:
String b64Key = Base64.getEncoder().encodeToString(key.getEncoded());
// Restore the key:
byte[] decoded = Base64.getDecoder().decode(b64Key);
SecretKey restored = new SecretKeySpec(decoded, "AES");Chiffrement AES/GCM
Le mode GCM nécessite un vecteur d’initialisation (IV) unique de 12 octets pour chaque chiffrement. Générez un nouvel IV aléatoire pour chaque opération de chiffrement : ne réutilisez jamais un IV avec la même clé.
byte[] iv = new byte[12]; // 96-bit IV for GCM
new SecureRandom().nextBytes(iv);
Cipher cipher = Cipher.getInstance("AES/GCM/NoPadding");
GCMParameterSpec spec = new GCMParameterSpec(128, iv); // 128-bit auth tag
cipher.init(Cipher.ENCRYPT_MODE, key, spec);
byte[] ciphertext = cipher.doFinal(plaintext.getBytes(StandardCharsets.UTF_8));
// Transmit/store: IV + ciphertext (IV is not secret)Déchiffrement AES/GCM
Extrayez l’IV des données stockées, reconstruisez la spécification, puis déchiffrez. GCM vérifie automatiquement l’authenticité : les données falsifiées déclenchent AEADBadTagException.
// Assume stored = iv + ciphertext:
byte[] iv = Arrays.copyOfRange(stored, 0, 12);
byte[] ciphertext = Arrays.copyOfRange(stored, 12, stored.length);
Cipher cipher = Cipher.getInstance("AES/GCM/NoPadding");
cipher.init(Cipher.DECRYPT_MODE, key, new GCMParameterSpec(128, iv));
byte[] plaintext = cipher.doFinal(ciphertext); // throws if tamperedStocker l’IV avec le texte chiffré
L’IV n’est pas secret : stockez-le devant le texte chiffré ou à ses côtés. Le destinataire a besoin de l’IV pour déchiffrer. La clé doit rester secrète.
byte[] encryptedData = new byte[iv.length + ciphertext.length];
System.arraycopy(iv, 0, encryptedData, 0, iv.length);
System.arraycopy(ciphertext, 0, encryptedData, iv.length, ciphertext.length);
String b64 = Base64.getEncoder().encodeToString(encryptedData);Dériver une clé à partir d’un mot de passe (PBKDF2)
N’utilisez jamais directement un mot de passe comme clé AES : son entropie est trop faible. Dérivez une clé avec PBKDF2 en utilisant un sel aléatoire et un nombre élevé d’itérations.
PBEKeySpec spec = new PBEKeySpec(password.toCharArray(), salt, 310_000, 256);
SecretKeyFactory skf = SecretKeyFactory.getInstance("PBKDF2WithHmacSHA256");
byte[] keyBytes = skf.generateSecret(spec).getEncoded();
SecretKey key = new SecretKeySpec(keyBytes, "AES");Utiliser un fournisseur de sécurité Java
Le fournisseur par défaut du JDK gère AES. Pour disposer d’algorithmes supplémentaires ou respecter la conformité FIPS, utilisez le fournisseur BouncyCastleProvider.
// With Bouncy Castle:
Security.addProvider(new BouncyCastleProvider());
Cipher cipher = Cipher.getInstance("AES/GCM/NoPadding", "BC");Modèle du chiffrement enveloppe
Chiffrez les données avec une clé de chiffrement des données (DEK) générée aléatoirement. Chiffrez la DEK avec une clé de chiffrement de clés (KEK) stockée dans un KMS (AWS KMS, HashiCorp Vault). Cela limite l’exposition des clés.
AES dans les applications Spring
TextEncryptor de Spring Security ou le module Spring Security Crypto fournissent un chiffrement AES de haut niveau sans avoir à gérer manuellement le chiffreur et l’IV.
TextEncryptor encryptor = Encryptors.text(password, salt);
String encrypted = encryptor.encrypt("sensitive data");
String decrypted = encryptor.decrypt(encrypted);Pièges courants
Ne faites jamais ceci : réutiliser un IV avec la même clé, utiliser le mode ECB (les motifs sont conservés), utiliser directement un mot de passe comme clé ou ignorer la balise d’authentification. Utilisez toujours GCM dans le nouveau code.
Vérification rapide
Que fournit AES/GCM contrairement à AES/CBC ?
Récapitulatif
Utilisez AES/GCM/NoPadding pour un chiffrement authentifié. Générez un nouvel IV aléatoire de 12 octets pour chaque chiffrement. Placez l’IV devant le texte chiffré. Dérivez les clés à partir des mots de passe avec PBKDF2. Ne réutilisez jamais un IV avec la même clé.
Questions Fréquemment Posées
La leçon « Chiffrement symétrique AES » est-elle gratuite ?
Oui — le texte complet de « Chiffrement symétrique AES » est gratuit à lire ici sur le web. Pour la pratiquer de manière interactive (un éditeur de code intégré et un tuteur IA 24/7) et déverrouiller le reste du cours Java Academy, passe à CoddyKit PRO. Le cours Java Academy comprend 4 leçons au total.
Qu'est-ce que j'apprendrai dans « Chiffrement symétrique AES » ?
Chiffrez et déchiffrez des données sensibles avec AES/CBC/PKCS5Padding en utilisant l’API javax.crypto de Java. Tu pratiques Java Academy avec du code pratique que tu exécutes directement dans le navigateur, et un tuteur IA 24/7 répond à tes questions au fur et à mesure que tu avances dans la leçon.
Dois-je avoir de l'expérience pour commencer Java Academy ?
Aucune expérience préalable n'est requise. Java Academy sur CoddyKit est structuré pour les débutants jusqu'aux apprenants avancés, donc tu peux commencer ici ou depuis le début et avancer à ton rythme. Ceci est la leçon 2 sur 4.
Combien de temps prend la leçon « Chiffrement symétrique AES » ?
La plupart des leçons CoddyKit prennent environ 5–10 minutes. Chacune est courte et interactive, tu progresses régulièrement et tu repiques exactement où tu t'es arrêté sur le web et l'app.
Peux-tu écrire et exécuter du code dans cette leçon Java Academy ?
Oui. Chaque leçon Java Academy inclut un éditeur de code intégré, tu écris et exécutes du vrai code directement dans ton navigateur et tu reçois des retours IA instantanés — aucune configuration locale requise.
Toutes les leçons de ce cours
- Hachage cryptographique avec MessageDigest
- Chiffrement symétrique AES
- HMAC-SHA256 pour l’intégrité des messages
- JWT : structure, création et vérification