Was ist Base64?
Base64 ist ein Verfahren, beliebige Binärdaten — ein Bild, ein PDF, einen Schlüssel — mit nur 64 „sicheren“ Zeichen darzustellen: A–Z, a–z, 0–9, + und /, dazu = als Auffüllzeichen. Weil das Ergebnis reiner ASCII-Text ist, übersteht es Systeme, die nur für Text gedacht sind: E-Mail, JSON, XML, HTML, URLs und HTTP-Header.
Base64 ist eine Kodierung, keine Verschlüsselung. Jeder kann es dekodieren; es schützt also keine Geheimnisse, sondern macht Daten nur transportierbar. Das Format ist in RFC 4648 definiert; E-Mail (MIME) nutzt dasselbe Alphabet mit einem Zeilenumbruch alle 76 Zeichen (RFC 2045).
So funktioniert die Base64-Kodierung
Der Encoder nimmt jeweils 3 Bytes (24 Bit), teilt sie in vier Gruppen zu 6 Bit und ordnet jeder Gruppe (0–63) ein Zeichen des Alphabets zu. Hier das Wort „Man“:
| Schritt | 1 | 2 | 3 | 4 |
|---|---|---|---|---|
| Text | M | a | n | |
| Bytewert | 77 | 97 | 110 | |
| Bits (8 pro Byte) | 01001101 | 01100001 | 01101110 | |
| Bits (6 pro Zeichen) | 010011 | 010110 | 000101 | 101110 |
| Index (0–63) | 19 | 22 | 5 | 46 |
| Base64 | T | W | F | u |
Aus „Man“ wird also TWFu. Ist die Eingabelänge kein Vielfaches von drei, wird die letzte Gruppe mit Null-Bits aufgefüllt und ein oder zwei = angehängt: „Ma“ → TWE=, „M“ → TQ==.
Base64-Varianten
| Variante | Zeichen / Regel | Verwendet in |
|---|---|---|
| Standard (RFC 4648 §4) | A–Z a–z 0–9 + / und = | JSON-APIs, XML, Datenbanken, die meisten Programmiersprachen |
| URL-sicher (Base64URL, §5) | A–Z a–z 0–9 - _ meist ohne = | JWT-Token, URLs, Dateinamen, OAuth, WebAuthn |
| MIME (RFC 2045) | Standard, max. 76 Zeichen pro Zeile, CRLF | E-Mail-Anhänge (SMTP), S/MIME |
| PEM (RFC 7468) | Standard, 64 Zeichen pro Zeile + BEGIN/END-Zeilen | TLS-Zertifikate, SSH- und PGP-Schlüssel |
| Data-URI (RFC 2397) | data:[Typ];base64,[Daten] | In HTML, CSS, SVG und E-Mails eingebettete Bilder und Schriften |
Typische Anwendungen
- Bilder einbetten in HTML, CSS oder E-Mails als Data-URI, um eine HTTP-Anfrage zu sparen (ideal für kleine Icons unter ca. 10 KB).
- Dateien über JSON- oder XML-APIs senden — z. B. ein Dokument oder eine Unterschrift in einer REST-Anfrage hochladen.
- JWT-Token lesen: Header und Payload sind Base64URL-kodiertes JSON. Einen Teil hier einfügen und lesen.
- HTTP-Basic-Authentifizierung: Der Header
Authorizationenthältbenutzer:passwortin Base64. - Zertifikate und Schlüssel (PEM-Dateien), Kubernetes-Secrets und viele Konfigurationswerte werden als Base64 gespeichert.
Wie viel größer werden Daten durch Base64?
Base64 ist immer rund 33 % größer als die Eingabe: Aus je 3 Bytes werden 4 Zeichen. Die genaue Länge beträgt 4 × ⌈n / 3⌉ Zeichen (ohne Zeilenumbrüche). Mit MIME-Zeilenumbrüchen sind es rund 37 %.
| Original | Base64 | Mit MIME-Umbrüchen |
|---|---|---|
| 1 KB (1.024 Bytes) | 1.368 Zeichen | ≈ 1,4 KB |
| 100 KB | ≈ 133 KB | ≈ 137 KB |
| 1 MB | ≈ 1,33 MB | ≈ 1,37 MB |
| 10 MB | ≈ 13,3 MB | ≈ 13,7 MB |
Ist Base64 sicher?
Nein — Base64 verbirgt nichts. Verwenden Sie es nie, um Passwörter oder personenbezogene Daten zu „schützen“; nutzen Sie dafür echte Verschlüsselung (z. B. AES oder TLS). Sicher ist dagegen dieses Tool: Ihre Daten werden lokal im Browser kodiert und dekodiert und nie hochgeladen — wichtig bei Tokens, Schlüsseln oder Kundendateien (DSGVO).
Base64 im Code
Tipp: In JavaScript akzeptiert btoa() nur Latin-1 und scheitert an Emojis oder „€“ — wandeln Sie den Text zuerst in UTF-8-Bytes um, wie unten gezeigt.
| Sprache | Kodieren | Dekodieren |
|---|---|---|
| JavaScript | btoa(String.fromCharCode(...new TextEncoder().encode(s))) | new TextDecoder().decode(Uint8Array.from(atob(b), c => c.charCodeAt(0))) |
| Node.js | Buffer.from(s, 'utf8').toString('base64') | Buffer.from(b, 'base64').toString('utf8') |
| Python | base64.b64encode(s.encode()).decode() | base64.b64decode(b).decode() |
| PHP | base64_encode($s) | base64_decode($b, true) |
| Java | Base64.getEncoder().encodeToString(bytes) | Base64.getDecoder().decode(b) |
| C# | Convert.ToBase64String(bytes) | Convert.FromBase64String(b) |
| Go | base64.StdEncoding.EncodeToString(data) | base64.StdEncoding.DecodeString(b) |
| Linux / macOS | base64 -w 0 file.bin | base64 -d file.txt > file.bin |
| PowerShell | [Convert]::ToBase64String([IO.File]::ReadAllBytes("f.bin")) | [IO.File]::WriteAllBytes("f.bin", [Convert]::FromBase64String($b)) |
Tipps
- Tastatur: Strg+Enter wandelt um, Strg+Umschalt+Enter tauscht Eingabe und Ergebnis, Strg+S speichert (⌘ am Mac).
- Kaputte Umlaute nach dem Dekodieren (z. B. „ä“ statt „ä“)? Die Daten wurden vermutlich mit einem anderen Zeichensatz erstellt — wählen Sie Windows-1252 oder ISO-8859-1 im Menü Zeichensatz.
- JWT: Nur den mittleren Teil (zwischen den beiden Punkten) einfügen und dekodieren — URL-sicheres Alphabet und fehlendes Auffüllen werden automatisch erkannt.
- Screenshots: Strg+V irgendwo auf der Seite verwandelt ein kopiertes Bild in eine Data-URI.
- Große Bilder machen HTML und CSS schwer. Ab einigen Kilobyte lädt eine normale Bilddatei (komprimiert mit unserem Bildkompressor) schneller.