Comment déchiffrer un texte AES
- Déchiffrer est sélectionné et un exemple est déjà chargé. Son mot de passe est
correct horse battery staple: vous pouvez donc d’abord voir une exécution réussie. - Collez votre chaîne dans Base64 chiffré. Le Base64 standard comme URL-safe fonctionne, avec ou sans
=, et les sauts de ligne sont ignorés. - Avec le type de clé Mot de passe, saisissez le mot de passe et, si l’expéditeur l’a modifié, le même nombre d’Itérations PBKDF2 (310 000 par défaut). Pour Clé brute, collez la clé de 16, 24 ou 32 octets en Base64 ou en hex.
- Cliquez sur Déchiffrer, ou appuyez sur Entrée dans le champ du mot de passe. Le message apparaît sous Texte déchiffré. Si le contenu n’est pas du texte UTF-8, il est affiché en Base64 et Télécharger enregistre les octets d’origine.
Une exécution réussie affiche « Déchiffré et authentifié » : le tag GCM correspondait, le texte est donc exactement celui que l’expéditeur a chiffré.
Déchiffrer ou décoder du Base64 ?
Beaucoup de gens cherchent « décrypter Base64 » alors qu’ils ont une simple chaîne Base64. Base64 est un encodage sans clé : une telle chaîne n’a besoin que d’être décodée, ce que fait le décodeur Base64. Un test rapide : si le décodage donne un texte lisible ou un fichier reconnaissable, il n’a jamais été chiffré. S’il donne des octets d’apparence aléatoire et qu’on vous a fourni un mot de passe, vous avez un texte chiffré, et c’est la bonne page, à condition qu’il ait été produit dans le format ci-dessous. Base64 n’est pas du chiffrement explique la différence.
Tester avec une valeur connue
Cette chaîne a été chiffrée hors du navigateur avec la fonction Python encrypt() de la documentation du format, avec le mot de passe correct horse battery staple :
SD8wB+5V2GRfupy/yEY1xTUE8d5z9fwbzQ0gxeRzbtym1I4O7A9Q2NYnbYxEPYgvwJ4Q7DU5q/sugOx+B1Ro3ujkDXvnl/y2XYuji9A=
Elle se déchiffre en Meet me at the usual place at 10. Les 104 caractères se décodent en 77 octets : 16 de sel, 12 d’IV, 33 de texte chiffré et 16 de tag. Le détail sous le résultat montre la même répartition pour toute chaîne que vous collez.
Messages d’erreur et leur signification
| Message | Cause habituelle |
|---|---|
| Échec du déchiffrement : mot de passe ou clé incorrect, mauvais mode, ou données modifiées | Mauvais mot de passe, nombre d’itérations différent, clé brute utilisée pour un blob à mot de passe ou l’inverse, ou caractère perdu lors de la copie |
| Trop court pour être un texte chiffré de cet outil | La chaîne a été coupée, ou elle ne vient pas du tout de cet outil |
| Une clé AES doit faire 16, 24 ou 32 octets | La clé brute n’a pas la bonne longueur ; vérifiez si elle est en Base64 ou en hex |
| Ce navigateur ne prend pas en charge les clés AES de 192 bits | Chrome et Edge n’acceptent que des clés de 128 et 256 bits ; déchiffrez plutôt avec Python ou Node.js |
| Le nombre d’itérations doit être compris entre 1 000 et 10 000 000 | Le champ des itérations contient une valeur impossible |
GCM ne distingue pas un mauvais mot de passe de données altérées : dans les deux cas, le tag ne correspond pas et rien n’est produit. Les modes non authentifiés comme CBC peuvent renvoyer des octets illisibles au lieu d’une erreur.
Les chaînes que cet outil ne peut pas ouvrir
Le format est fixe : Base64( salt[16] ‖ iv[12] ‖ ciphertext ‖ tag[16] ) pour les mots de passe, Base64( iv[12] ‖ ciphertext ‖ tag[16] ) pour les clés brutes, AES-GCM, PBKDF2-HMAC-SHA256 avec 310 000 itérations. D’autres outils écrivent d’autres formats, et les premiers caractères les trahissent souvent :
| Commence par | Produit par | Déchiffrer avec |
|---|---|---|
U2FsdGVkX1 | openssl enc ou CryptoJS avec une phrase secrète (en-tête Salted__) | openssl enc -d -a avec le chiffrement et les options de KDF d’origine |
gAAAAA | un jeton Fernet (cryptography en Python) | Fernet(key).decrypt(token) |
-----BEGIN PGP MESSAGE----- | OpenPGP | gpg --decrypt |
-----BEGIN AGE ENCRYPTED FILE----- | age | age --decrypt |
D’autres débuts reconnaissables sont réunis dans Préfixes Base64 courants.
Déchiffrer en Node.js et en Python
Le même format fonctionne sans navigateur. En Node.js :
const crypto = require("crypto");
function decrypt(b64, password) {
const data = Buffer.from(b64, "base64");
const salt = data.subarray(0, 16), iv = data.subarray(16, 28);
const tag = data.subarray(data.length - 16), ct = data.subarray(28, data.length - 16);
const key = crypto.pbkdf2Sync(password, salt, 310000, 32, "sha256");
const d = crypto.createDecipheriv("aes-256-gcm", key, iv);
d.setAuthTag(tag);
return Buffer.concat([d.update(ct), d.final()]).toString("utf8");
}
function encrypt(text, password) {
const salt = crypto.randomBytes(16), iv = crypto.randomBytes(12);
const key = crypto.pbkdf2Sync(password, salt, 310000, 32, "sha256");
const c = crypto.createCipheriv("aes-256-gcm", key, iv);
const ct = Buffer.concat([c.update(text, "utf8"), c.final()]);
return Buffer.concat([salt, iv, ct, c.getAuthTag()]).toString("base64");
}
Pour une chaîne à clé brute en Python, sautez le sel et PBKDF2 et lisez l’IV à partir de l’octet 0 :
import base64
from cryptography.hazmat.primitives.ciphers.aead import AESGCM
def decrypt_raw(b64, key_b64):
data = base64.b64decode(b64)
iv, ct = data[:12], data[12:]
return AESGCM(base64.b64decode(key_b64)).decrypt(iv, ct, None).decode("utf-8")
La version Python à mot de passe se trouve sur la page Chiffrement AES. Ce type de chiffrement sert à transmettre un secret d’une personne à une autre ; une fois arrivé, placez-le dans un gestionnaire de mots de passe ou de secrets au lieu de conserver le texte chiffré.
FAQ
Peut-on déchiffrer du Base64 sans mot de passe ?
Si ce n’est que du Base64, oui, car il n’y a rien à déchiffrer : collez-le dans le décodeur Base64. Si c’est un texte chiffré AES en Base64, non. Sans le mot de passe ou la clé, les octets ne peuvent pas être récupérés, et aucun outil ne peut deviner un mot de passe solide.
Pourquoi l'outil indique-t-il un mauvais mot de passe alors qu'il est correct ?
Vérifiez d’abord les itérations PBKDF2 : elles ne sont pas stockées dans le texte chiffré, et un expéditeur qui les a modifiées doit vous communiquer le nombre. Vérifiez aussi que la chaîne a été copiée en entier et qu’elle provient bien du format de cet outil.
Cet outil peut-il déchiffrer un texte produit par OpenSSL ou CryptoJS ?
Non. Les chaînes qui commencent par U2FsdGVkX1 portent l’en-tête Salted__ d’OpenSSL et utilisent une autre dérivation de clé, généralement en mode CBC. Déchiffrez-les avec openssl enc -d et les mêmes options que celles du chiffrement.
Que devient le texte déchiffré ?
Il s’affiche sur la page et nulle part ailleurs. Le déchiffrement s’exécute dans votre navigateur avec WebCrypto, et la Content Security Policy de la page bloque toute requête réseau hormis le comptage des pages vues de Cloudflare : ni le mot de passe ni le message ne sont envoyés.