So dekodieren Sie Base64 in eine Datei
- Fügen Sie die Zeichenkette in Base64 oder Data-URI ein. Standard- und URL-sicheres Base64 werden beide akzeptiert, mit oder ohne Padding, Zeilenumbrüche oder Anführungszeichen. Eine ganze Data-URI funktioniert, ebenso Text, der eine enthält: ein CSS-
url("data:…"), ein HTML-src="data:…"oder ein Markdown-Bild. Für eine lange Zeichenkette in einer Datei nutzen Sie .txt-Datei öffnen oder legen die Datei auf dem Feld ab. - Lesen Sie die Statuszeile unter der Eingabe: ob die Eingabe gültig ist, welche Variante vorliegt (Standard oder Base64URL), die dekodierte Größe und den Typ bei Erkannt. Bei einer Data-URI erscheint außerdem der Angegeben-Typ.
- Sehen Sie sich die Vorschau und die drei Felder darunter an. Dateiname, Endung und MIME-Typ werden aus der Erkennung ausgefüllt. Was Sie dort eintragen, bleibt, bis Sie Leeren drücken.
- Drücken Sie Datei herunterladen, oder Als Data-URI kopieren, um die Bytes wieder als
data:<MIME type>;base64,…zu erhalten.
Beispiel lädt bei jedem Klick eine andere Testdatei: PNG, PDF, ZIP, WAV, DOCX, JSON, gzip und SVG. Legen Sie eine Datei ab, die bereits binär ist, etwa ein PDF statt einer Textdatei mit seinem Base64, weist das Tool Sie darauf hin und verlinkt Datei in Base64, das in die Gegenrichtung arbeitet.
Warum die Datei als application/octet-stream erscheint
application/octet-stream bedeutet „irgendwelche Bytes, Typ unbekannt“. Vor Base64 landet es aus ganz gewöhnlichen Gründen. Chromes FileReader.readAsDataURL() erzeugt data:application/octet-stream;base64, für jede Datei, deren Typ der Browser nicht kennt. Speicher- und Exportsysteme, die die Bytes behalten, aber nicht den Typ, kennzeichnen alles so. Manche APIs deklarieren jeden Anhang als octet-stream. Ein Viewer, der sich auf die Angabe verlässt, weigert sich dann, die Datei anzuzeigen, und ein Download bekommt keine brauchbare Endung.
Meist verraten die Bytes selbst das Format: Die meisten Formate beginnen mit einer festen Signatur, und das Tool prüft über 60 davon. Einige Signaturen teilen sich mehrere Formate, daher schaut das Tool tiefer in die Datei:
| Erste Bytes | Base64 beginnt mit | Mögliche Formate | Wie das Tool sie unterscheidet |
|---|---|---|---|
PK 03 04 | UEsDB | ZIP, DOCX, XLSX, PPTX, EPUB, ODT, ODS, JAR, APK | Namen der Einträge: word/, xl/, ppt/, der Eintrag mimetype, AndroidManifest.xml, META-INF/MANIFEST.MF |
RIFF | UklGR | WebP, WAV, AVI | Die vier Buchstaben bei Byte 8 |
ftyp bei Byte 4 | AAAA, zum Beispiel AAAAIGZ0eXB | MP4, M4A, MOV, 3GP, HEIC, AVIF | Die Kennung (Brand) bei Byte 8 bis 11 |
OggS | T2dnUw | Ogg Vorbis, Opus, Theora-Video | Der Codec-Header in der ersten Page |
1A 45 DF A3 | GkXfo | WebM, MKV | Der Dokumenttyp webm |
D0 CF 11 E0 | 0M8R4KGxGuE | DOC, XLS, PPT, Outlook-MSG, passwortgeschützte Office-Dateien | Gar nicht; es meldet „DOC/XLS/MSG (OLE)“ |
Die vollständige Liste der Signaturen finden Sie unter gängige Base64-Präfixe.
Gibt eine Data-URI einen Typ an und der Inhalt widerspricht, weist ein Hinweis darauf hin, zum Beispiel „Die Data-URI gibt application/octet-stream an, der Inhalt sieht aber nach PDF aus.“, und der erkannte Typ wird verwendet. Der angegebene Typ setzt sich nur durch, wenn die Erkennung unsicher ist: wenn die Bytes wie reiner Text oder unbekannte Binärdaten aussehen.
Base64 in Base64, URL-Kodierung und gzip
Daten, die durch mehrere Systeme gegangen sind, sind oft mehrfach verpackt. Nach dem Dekodieren prüft das Tool, ob das Ergebnis eine weitere Schicht ist, und bietet Erneut dekodieren an:
| Hinweis | Was passiert ist |
|---|---|
| „Die dekodierten Daten sind selbst Base64-Text (darin: PDF).“ | Zweimal kodiert, typischerweise von zwei Code-Schichten, die jeweils „sicherheitshalber“ kodiert haben |
| „Die dekodierten Daten sind URL-kodiertes Base64“ | Das Base64 wurde für eine URL prozentkodiert (%2B, %2F, %3D), bevor es erneut kodiert wurde |
| „Die dekodierten Daten sind eine data:-URI.“ | Jemand hat die ganze data:…-Zeichenkette kodiert statt nur ihren Inhalt |
| „Die Daten sind gzip-komprimiert: 817 B entpackt (PDF).“ | Vor dem Kodieren komprimiert, um Platz zu sparen, üblich in Logs und Message Queues; zlib wird ebenfalls erkannt |
Erneut dekodieren setzt die innere Schicht in die Eingabe und dekodiert sie; Zurück geht wieder eine Ebene hinaus und merkt sich bis zu 20 Schritte. Die Hinweise zu gzip und zlib erscheinen erst, nachdem das Tool die Daten tatsächlich entpackt hat, bei Ergebnissen bis 16 MB. Die gzip-Vorschau zeigt außerdem den im Header gespeicherten Originalnamen und die Änderungszeit, mit Entpackt speichern für den Inhalt. Für Text-Payloads ist der gzip-Base64-Decoder das direktere Tool.
Mit der richtigen Endung speichern
Windows und macOS wählen das Programm anhand der Endung, ein als decoded.bin gespeichertes PDF wirkt also kaputt, obwohl jedes Byte stimmt. Die Felder Endung und MIME-Typ folgen der Erkennung, bis Sie selbst etwas eintragen:
- Der Dateiname stammt aus einem Parameter
name=oderfilename=in einer Data-URI oder aus dem Namen der geöffneten Textdatei, ohne deren Endung.txtoder.b64:report.pdf.b64.txtwird alsreport.pdfgespeichert. - Bei einer OLE-Datei, von der Sie wissen, dass sie eine Tabelle ist, tragen Sie
xlsin Endung ein; das Tool kann DOC, XLS und MSG nicht unterscheiden. - Ein eingetragener MIME-Typ stellt auch die Vorschau auf diese Art um. Meldet das Tool Binärdaten, Sie erwarten aber Audio, versucht es mit
audio/oggden Audioplayer. - Der MIME-Typ wirkt sich nur auf den Download und auf Als Data-URI kopieren aus; eine Datei auf der Festplatte hat keinen MIME-Typ, nur ihre Bytes und ihren Namen.
Was die Vorschau zeigt
Jedes Ergebnis nennt Typ, MIME-Typ, Endung, Größe und einen SHA-256-Hash, mit Hex-Dump anzeigen für die ersten 512 Bytes. Bei unbekannten Binärdaten ist der Hex-Dump von Anfang an geöffnet. Je nach Art:
| Art | Vorschau |
|---|---|
| Bilder | Das Bild und seine Pixelgröße; HEIC, TIFF und JPEG XL bekommen meist einen Hinweis, dass sie nicht angezeigt werden können, weil den meisten Browsern ein Decoder fehlt. Siehe Base64 in Bild. |
| Der PDF-Viewer Ihres Browsers, Version, Seitenzahl, Titel. Siehe Base64 in PDF. | |
| Audio und Video | Ein Player mit Dauer und Videogröße |
| Schriften | Bearbeitbarer Beispieltext in der dekodierten Schrift, mit Familie, Stil und Anzahl der Glyphen |
| ZIP, DOCX, XLSX, PPTX, EPUB | Die Liste der Einträge mit Ansehen und Speichern für jede Datei, dazu der Dokumenttext bei Office-Dateien und E-Books. Siehe Base64 in ZIP. |
| Text | Zeichensatz, Zeilen, formatiertes JSON, eine Tabelle bei CSV, das Wurzelelement bei XML, HTML in einer Sandbox |
| Zertifikate und Schlüssel | Ein Link zum Zertifikat-Decoder |
Den MIME-Typ von Base64 im Code erkennen
Vierundzwanzig Base64-Zeichen ergeben dekodiert 18 Bytes, genug für die gängigen Signaturen. Das funktioniert in Browsern und in Node.js ab Version 16:
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"
Auf der Kommandozeile liest file die dekodierten Bytes von der Standardeingabe:
base64 -d payload.b64 | file -b --mime-type -
Bei einem PDF gibt das application/pdf aus. Dekodieren Sie stattdessen mit OpenSSL, fügen Sie bei einer einzeiligen Zeichenkette -A hinzu. Ohne die Option schreibt openssl base64 -d kommentarlos nichts, wenn die Zeile keinen abschließenden Zeilenumbruch hat oder zu lang ist (in OpenSSL 3.5 ab 1.024 Zeichen). Mehr unter Base64 in JavaScript und Base64 in Bash.
Häufige Fragen
Wie finde ich den MIME-Typ einer Base64-Zeichenkette heraus?
Dekodieren Sie die ersten paar Bytes und vergleichen Sie sie mit bekannten Dateisignaturen: JVBERi0 ergibt %PDF-, iVBORw0KGgo die PNG-Signatur. Diese Seite macht das für über 60 Formate, und die JavaScript-Funktion auf dieser Seite deckt die gängigen in Ihrem eigenen Code ab.
Was bedeutet „Datei kann nicht als application/octet-stream angezeigt werden“?
application/octet-stream ist die allgemeine Bezeichnung für Bytes unbekannten Typs; ein Viewer, der sich auf die Angabe verlässt, hat also keinen Anhaltspunkt. Fügen Sie dieselbe Zeichenkette hier ein: Untersucht wird der Inhalt statt der Angabe, und Endung und MIME-Typ werden für Sie ausgefüllt.
Was kann ich tun, wenn der Typ nicht erkannt wird?
Die Vorschau zeigt dann Binärdaten mit einem Hex-Dump der ersten 512 Bytes. Kennen Sie das Format, tragen Sie vor dem Herunterladen Endung und MIME-Typ ein; der MIME-Typ schaltet auch die Vorschau um, mit audio/ogg versucht das Tool also, die Bytes abzuspielen.
Wie große Dateien kann ich dekodieren?
Es gibt keine feste Grenze; der Speicher Ihres Geräts setzt sie. Ab etwa 50 MB Base64 hält die Seite beim Dekodieren kurz inne, und Als Data-URI kopieren ist bei Dateien über 32 MB deaktiviert.
Wird die Datei irgendwohin hochgeladen?
Nein. Dekodieren, Typerkennung und Vorschau laufen in Ihrem Browser, und die Content Security Policy der Seite lässt keine Netzwerkanfragen zu, außer dem Seitenaufrufzähler von Cloudflare.