Charger un fichier
  1. base64hub
  2. Clés et hachages
  3. Déchiffrement AES

Déchiffrer de l'AES depuis Base64

Collez le Base64 chiffré et saisissez le mot de passe pour lire le message. AES-GCM vérifie l’intégrité pendant le déchiffrement : un mauvais mot de passe ou un seul caractère modifié produit une erreur claire.

Gratuit sans inscription, sans limites Local rien n'est envoyé Contrôle d'intégrité Tag GCM vérifié à chaque déchiffrement Mis à jour 27 oct. 2026
Format – déchiffrable n'importe où

Sortie = Base64( sel 16 octets ‖ IV 12 octets ‖ texte chiffré ‖ tag GCM 16 octets ). Clé = PBKDF2-HMAC-SHA256(mot de passe en UTF-8, sel, 310 000 itérations, 32 octets). Chiffrement : AES-256-GCM, sans données associées. Code pour le déchiffrer :

Python (pip install cryptography)

import base64
from cryptography.hazmat.primitives.ciphers.aead import AESGCM
from cryptography.hazmat.primitives.kdf.pbkdf2 import PBKDF2HMAC
from cryptography.hazmat.primitives import hashes

def decrypt(b64, password):
    data = base64.b64decode(b64)
    salt, iv, ct = data[:16], data[16:28], data[28:]
    key = PBKDF2HMAC(algorithm=hashes.SHA256(), length=32, salt=salt,
                     iterations=310000).derive(password.encode("utf-8"))
    return AESGCM(key).decrypt(iv, ct, None).decode("utf-8")
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");
}

Traité dans votre navigateur. Cette page ne peut envoyer vos données nulle part – comment le savons-nous

Comment déchiffrer un texte AES

  1. 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.
  2. 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.
  3. 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.
  4. 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

MessageCause habituelle
Échec du déchiffrement : mot de passe ou clé incorrect, mauvais mode, ou données modifiéesMauvais 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 outilLa 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 octetsLa 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 bitsChrome 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 000Le 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 parProduit parDéchiffrer avec
U2FsdGVkX1openssl 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
gAAAAAun jeton Fernet (cryptography en Python)Fernet(key).decrypt(token)
-----BEGIN PGP MESSAGE-----OpenPGPgpg --decrypt
-----BEGIN AGE ENCRYPTED FILE-----ageage --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.