Comment décoder du Base64 en fichier
- Collez la chaîne dans Base64 ou data URI. Le Base64 standard comme URL-safe est accepté, avec ou sans remplissage, sauts de ligne ou guillemets. Une data URI complète fonctionne, tout comme un texte qui en contient une : un
url("data:…")CSS, unsrc="data:…"HTML ou une image Markdown. Pour une longue chaîne enregistrée dans un fichier, utilisez Ouvrir un fichier .txt ou déposez-le sur la zone. - Lisez la ligne d’état sous l’entrée : validité de l’entrée, variante (Standard ou Base64URL), taille décodée et type Détecté. Une data URI affiche aussi son type Déclaré.
- Regardez l’aperçu et les trois champs en dessous. Nom du fichier, Extension et Type MIME sont remplis d’après la détection. Ce que vous y saisissez reste en place jusqu’à ce que vous appuyiez sur Effacer.
- Appuyez sur Télécharger le fichier, ou sur Copier en data URI pour récupérer les octets sous la forme
data:<MIME type>;base64,….
Exemple charge un fichier de test différent à chaque clic : PNG, PDF, ZIP, WAV, DOCX, JSON, gzip et SVG. Si vous déposez un fichier déjà binaire, par exemple un PDF au lieu d’un fichier texte contenant son Base64, l’outil vous le signale et propose un lien vers Fichier en Base64, qui fait le chemin inverse.
Pourquoi le fichier apparaît comme application/octet-stream
application/octet-stream signifie « des octets, type inconnu ». Cette étiquette se retrouve devant du Base64 pour des raisons banales. FileReader.readAsDataURL() dans Chrome produit data:application/octet-stream;base64, pour tout fichier dont le navigateur ne connaît pas le type. Les systèmes de stockage et d’export qui conservent les octets mais pas le type étiquettent tout de cette façon. Certaines API déclarent chaque pièce jointe en octet-stream. Une visionneuse qui se fie à l’étiquette refuse alors d’afficher le fichier, et un téléchargement n’obtient aucune extension utile.
Ce sont en général les octets eux-mêmes qui révèlent le format : la plupart des formats commencent par une signature fixe, et l’outil en vérifie plus de 60. Quelques signatures sont partagées : l’outil regarde alors plus loin dans le fichier.
| Premiers octets | Le Base64 commence par | Peut être | Comment l’outil les distingue |
|---|---|---|---|
PK 03 04 | UEsDB | ZIP, DOCX, XLSX, PPTX, EPUB, ODT, ODS, JAR, APK | Noms des entrées : word/, xl/, ppt/, l’entrée mimetype, AndroidManifest.xml, META-INF/MANIFEST.MF |
RIFF | UklGR | WebP, WAV, AVI | Les quatre lettres à l’octet 8 |
ftyp à l’octet 4 | AAAA, par exemple AAAAIGZ0eXB | MP4, M4A, MOV, 3GP, HEIC, AVIF | La marque aux octets 8 à 11 |
OggS | T2dnUw | Ogg Vorbis, Opus, vidéo Theora | L’en-tête du codec dans la première page |
1A 45 DF A3 | GkXfo | WebM, MKV | Le type de document webm |
D0 CF 11 E0 | 0M8R4KGxGuE | DOC, XLS, PPT, MSG Outlook, fichiers Office protégés par mot de passe | Impossible ; il indique « DOC/XLS/MSG (OLE) » |
La liste complète des signatures se trouve sur les préfixes Base64 courants.
Quand une data URI déclare un type que le contenu contredit, une note le signale, par exemple « La data URI indique application/octet-stream, mais le contenu ressemble à du PDF. », et c’est le type détecté qui est utilisé. Le type déclaré ne l’emporte que si la détection est faible : quand les octets ressemblent à du texte brut ou à du binaire inconnu.
Base64 dans du Base64, encodage URL et gzip
Les données qui ont transité par plusieurs systèmes sont souvent emballées plus d’une fois. Après le décodage, l’outil vérifie si le résultat est une autre couche et propose Décoder à nouveau :
| Note | Ce qui s’est passé |
|---|---|
| « Les données décodées sont elles-mêmes du texte Base64 (contenu : PDF). » | Encodé deux fois, typiquement par deux couches de code qui ont chacune encodé « par sécurité » |
| « Les données décodées sont du Base64 encodé en URL » | Le Base64 a été encodé en pourcent pour une URL (%2B, %2F, %3D) avant d’être encodé à nouveau |
| « Les données décodées sont une URI data:. » | Quelqu’un a encodé toute la chaîne data:… au lieu de sa charge utile |
| « Les données sont compressées en gzip : 817 B décompressés (PDF). » | Compressé avant l’encodage pour gagner de la place, courant dans les logs et les files de messages ; zlib est aussi reconnu |
Décoder à nouveau place la couche intérieure dans l’entrée et la décode ; Retour revient en arrière et mémorise jusqu’à 20 étapes. Les notes gzip et zlib n’apparaissent qu’une fois que l’outil a réellement décompressé les données, pour des résultats jusqu’à 16 Mo. L’aperçu gzip affiche aussi le nom de fichier d’origine et la date de modification stockés dans l’en-tête, avec Enregistrer décompressé pour le contenu. Pour des charges utiles textuelles, le décodeur Base64 gzip est l’outil le plus direct.
Enregistrer avec la bonne extension
Windows et macOS choisissent le programme d’après l’extension : un PDF enregistré sous decoded.bin semble donc cassé alors que chaque octet est correct. Les champs Extension et Type MIME suivent la détection jusqu’à ce que vous y saisissiez quelque chose :
- Le nom de fichier vient d’un paramètre
name=oufilename=dans une data URI, ou du nom du fichier texte que vous avez ouvert, sans sa terminaison.txtou.b64:report.pdf.b64.txtest enregistré sousreport.pdf. - Pour un fichier OLE dont vous savez que c’est un tableur, saisissez
xlsdans Extension ; l’outil ne peut pas distinguer DOC, XLS et MSG. - Un Type MIME saisi fait aussi réafficher l’aperçu pour ce type. Si l’outil indique Binaire mais que vous attendez de l’audio, saisir
audio/ogglui fait essayer le lecteur audio. - Le type MIME n’agit que sur le téléchargement et sur Copier en data URI ; sur le disque, un fichier n’a pas de type MIME, seulement ses octets et son nom.
Ce que montre l’aperçu
Chaque résultat indique le type, le type MIME, l’extension, la taille et une empreinte SHA-256, avec Afficher le dump hex pour les 512 premiers octets. Le dump hex est ouvert d’emblée pour les données binaires inconnues. Selon le cas :
| Type | Aperçu |
|---|---|
| Images | L’image et ses dimensions en pixels ; HEIC, TIFF et JPEG XL donnent en général une note « impossible d’afficher », car la plupart des navigateurs n’ont pas de décodeur pour eux. Voir Base64 en image. |
| La visionneuse PDF de votre navigateur, la version, le nombre de pages, le titre. Voir Base64 en PDF. | |
| Audio et vidéo | Un lecteur avec la durée et la taille de la vidéo |
| Polices | Un texte d’exemple modifiable dans la police décodée, avec la famille, le style et le nombre de glyphes |
| ZIP, DOCX, XLSX, PPTX, EPUB | La liste des entrées avec Voir et Enregistrer pour chaque fichier, plus le texte du document pour les fichiers Office et les livres numériques. Voir Base64 en ZIP. |
| Texte | Jeu de caractères, lignes, JSON formaté, tableau pour le CSV, élément racine pour le XML, HTML en sandbox |
| Certificats et clés | Un lien vers le décodeur de certificats |
Détecter le type MIME d’un Base64 dans le code
Vingt-quatre caractères Base64 se décodent en 18 octets, assez pour les signatures courantes. Ce code fonctionne dans les navigateurs et dans Node.js 16 et versions ultérieures :
function sniffMime(b64) {
const head = b64.replace(/^data:[^,]*,/, "").replace(/\s+/g, "").slice(0, 24)
.replace(/-/g, "+").replace(/_/g, "/");
const b = Uint8Array.from(atob(head), (c) => c.charCodeAt(0));
const str = (start, len) => String.fromCharCode(...b.subarray(start, start + len));
if (str(0, 5) === "%PDF-") return "application/pdf";
if (str(0, 8) === "\x89PNG\r\n\x1a\n") return "image/png";
if (b[0] === 0xff && b[1] === 0xd8 && b[2] === 0xff) return "image/jpeg";
if (str(0, 4) === "GIF8") return "image/gif";
if (str(0, 4) === "RIFF" && str(8, 4) === "WEBP") return "image/webp";
if (str(0, 4) === "RIFF" && str(8, 4) === "WAVE") return "audio/wav";
if (str(4, 4) === "ftyp") return "video/mp4"; // also M4A, MOV, HEIC: see bytes 8-11
if (str(0, 4) === "PK\x03\x04") return "application/zip"; // also DOCX, XLSX, PPTX
if (b[0] === 0x1f && b[1] === 0x8b) return "application/gzip";
if (str(0, 3) === "ID3" || (b[0] === 0xff && (b[1] & 0xe6) === 0xe2)) return "audio/mpeg";
return "application/octet-stream";
}
sniffMime("data:application/octet-stream;base64,JVBERi0xLjcKJeLjz9MK"); // "application/pdf"
En ligne de commande, file lit les octets décodés depuis l’entrée standard :
base64 -d payload.b64 | file -b --mime-type -
Pour un PDF, la commande affiche application/pdf. Si vous décodez plutôt avec OpenSSL, ajoutez -A pour une chaîne sur une seule ligne. Sans cette option, openssl base64 -d n’écrit rien, sans prévenir, quand la ligne n’a pas de saut de ligne final ou qu’elle est trop longue (1 024 caractères ou plus dans OpenSSL 3.5). Plus de détails sur Base64 en JavaScript et Base64 en Bash.
FAQ
Comment obtenir le type MIME d'une chaîne Base64 ?
Décodez les premiers octets et comparez-les aux signatures de fichiers connues : JVBERi0 se décode en %PDF-, iVBORw0KGgo en signature PNG. Cette page le fait pour plus de 60 formats, et la fonction JavaScript présentée plus bas couvre les plus courants dans votre propre code.
Que signifie « cannot display the file as application/octet-stream » ?
application/octet-stream est l’étiquette générique pour des octets de type inconnu : une visionneuse qui se fie à l’étiquette n’a donc rien sur quoi s’appuyer. Collez la même chaîne ici : c’est le contenu qui est examiné, pas l’étiquette, et l’extension et le type MIME sont remplis pour vous.
Que faire quand le type n'est pas détecté ?
L’aperçu affiche alors Binaire avec un dump hex des 512 premiers octets. Si vous connaissez le format, saisissez l’extension et le type MIME avant de télécharger ; le type MIME change aussi l’aperçu : avec audio/ogg, l’outil essaie de lire les octets comme du son.
Quelle taille de fichier puis-je décoder ?
Il n’y a pas de limite fixe ; la mémoire de votre appareil fait office de limite. Au-delà d’environ 50 Mo de Base64, la page marque une courte pause pendant le décodage, et Copier en data URI est désactivé pour les fichiers de plus de 32 Mo.
Le fichier est-il envoyé quelque part ?
Non. Le décodage, la détection du type et l’aperçu se font dans votre navigateur, et la Content Security Policy de la page l’empêche d’envoyer des requêtes réseau, hormis le comptage des pages vues de Cloudflare.