Base64 in einer Minute
Computer speichern alles als Bytes, und ein Byte kann 256 verschiedene Werte haben. Viele ältere Protokolle und Formate, etwa E-Mail, URLs, JSON-Strings und HTTP-Header, wurden für lesbaren Text gebaut und können Bytes außerhalb eines kleinen sicheren Bereichs verfälschen oder ablehnen. Base64 löst das, indem es die Bytes mit Zeichen ausdrückt, die überall heil ankommen.
Das Tool unten kodiert Text beim Tippen in Base64 und wandelt ihn mit einem Klick auf Dekodieren wieder zurück. Der Text wird zuerst in UTF-8 umgewandelt, damit Umlaute wie ä, ö, ü und ß, andere Alphabete und Emoji genau so zurückkommen, wie sie waren. Die Statuszeile zeigt, wie viele Bytes Text zu wie vielen Bytes Base64 geworden sind.
Hier ausprobieren: Base64 kodieren
Vollständige Tool-Seite öffnenSo funktioniert die Kodierung, Schritt für Schritt
Base64 nimmt die Eingabe in Gruppen von 3 Bytes (24 Bit) und teilt diese 24 Bit in vier Gruppen zu je 6 Bit. Sechs Bit fassen eine Zahl von 0 bis 63, und jede Zahl wird in einem festen Alphabet nachgeschlagen: 0 bis 25 sind A bis Z, 26 bis 51 sind a bis z, 52 bis 61 sind 0 bis 9, 62 ist + und 63 ist /.
Nimm das Wort Man. Seine Bytes sind 77, 97 und 110, binär 01001101 01100001 01101110. In 6-Bit-Stücke umgruppiert ergibt das 010011 010110 000101 101110, also 19, 22, 5 und 46, und die stehen für T, W, F und u. Aus Man wird also TWFu.
Ist die Länge der Eingabe kein Vielfaches von 3, wird die letzte Gruppe aufgefüllt. Ein übriges Byte ergibt zwei Zeichen plus ==, zwei übrige Bytes ergeben drei Zeichen plus =. Deshalb wird Ma zu TWE= und M zu TQ==, und deshalb wird aus Hello (5 Bytes) SGVsbG8=.
Warum Base64 33 Prozent größer ist
Vier Ausgabezeichen tragen die Information von drei Eingabebytes, die Größe wächst also um den Faktor 4/3, plus bis zu zwei Füllzeichen. Manche Systeme fügen außerdem alle 76 Zeichen (E-Mail, MIME) oder alle 64 Zeichen (PEM-Zertifikate) einen Zeilenumbruch ein, was noch ein paar Prozent dazu bringt.
| Originalgröße | Größe in Base64 | Mit Zeilen zu 76 Zeichen |
|---|---|---|
| 3 Bytes | 4 Bytes | 4 Bytes |
| 1 KB (1.024 Bytes) | 1.368 Bytes | etwa 1,4 KB |
| 100 KB | etwa 133 KB | etwa 137 KB |
| 1 MB | etwa 1,33 MB | etwa 1,37 MB |
| E-Mail-Anhang mit 10 MB | etwa 13,3 MB | etwa 13,7 MB |
Wo dir Base64 begegnet
- E-Mail-Anhänge: MIME kodiert Dateien als Base64 mit Zeilen zu 76 Zeichen. Deshalb kann ein Mailanbieter mit 25 MB Nachrichtengrenze eine Datei mit 20 MB ablehnen: Kodiert hat sie über 27 MB.
- Data URIs: Bilder, Schriften und Icons, die in HTML oder CSS als data:image/png;base64, gefolgt von der kodierten Datei, eingebettet sind.
- HTTP-Basic-Authentifizierung: Der Header Authorization: Basic, gefolgt von benutzername:passwort in Base64. Jeder, der den Header sieht, kann ihn lesen, sicher ist das also nur über HTTPS.
- JSON Web Tokens: Header und Nutzdaten sind Base64url-kodiertes JSON, deshalb beginnt ein JWT mit eyJ (der Kodierung der Zeichen {").
- Zertifikate und Schlüssel: PEM-Dateien sind Base64 zwischen den Zeilen BEGIN und END.
- APIs und Konfiguration: Binärdaten in JSON-Feldern, Kubernetes Secrets, Umgebungsvariablen und Datenbankexporte.
Base64-Varianten: Standard, URL-sicher und MIME
Standard-Base64 (RFC 4648) verwendet + und / und füllt mit = auf. Diese drei Zeichen haben in Webadressen eine besondere Bedeutung, deshalb gibt es eine URL-sichere Variante, oft Base64url genannt, die stattdessen Minus und Unterstrich verwendet und meist auf das Auffüllen verzichtet. JWTs und viele Web-APIs nutzen sie. Im Tool schaltest du dafür URL-sicher ein. Der Decoder akzeptiert beide Formen und auch fehlende Füllzeichen.
MIME-Base64, wie es in E-Mails verwendet wird, ist Standard-Base64, aufgeteilt in Zeilen mit höchstens 76 Zeichen. Schalte Zeilen mit 76 Zeichen ein, wenn du eine Ausgabe für einen E-Mail-Text oder eine Datei im PEM-Stil brauchst.
Base64 ist keine Verschlüsselung
Es gibt keinen Schlüssel und kein Geheimnis. Wer cGFzc3dvcmQxMjM= sieht, kann es in einer Sekunde zu password123 dekodieren. Behandle Base64-kodierte Zugangsdaten, Tokens und Konfigurationen genau wie Klartext: Committe sie nicht in öffentliche Repositorys, füge sie nicht in fremde Websites ein und nutze Base64 nicht, um etwas zu verstecken. Kubernetes Secrets zum Beispiel sind standardmäßig nur Base64-kodiert, nicht verschlüsselt.
Wenn du Vertraulichkeit brauchst, nutze echte Verschlüsselung (etwa AES über eine ordentliche Bibliothek) und kodiere den verschlüsselten Text danach mit Base64, falls er als Text transportiert werden muss.
Häufige Probleme beim Dekodieren
- Kaputte Umlaute: Der Text wurde mit einem anderen Zeichensatz kodiert. In JavaScript akzeptiert btoa nur Zeichen bis zum Code 255 und kodiert sie als Latin 1. Aus ü wird dann /A== statt der UTF-8-Form w7w=, und Zeichen wie das Euro-Zeichen lösen einen Fehler aus. Nutze einen Kodierer, der UTF-8 beherrscht, wie das Tool auf dieser Seite.
- Fehler wegen ungültiger Zeichen: Der String enthält Leerzeichen, Zeilenumbrüche oder URL-sichere Zeichen, die ein strenger Decoder ablehnt. Dieses Tool ignoriert Zeilenumbrüche und akzeptiert beide Alphabete.
- Die Länge ist kein Vielfaches von 4: Die Füllzeichen wurden entfernt. Häng = an, bis die Länge durch 4 teilbar ist, oder nutz einen Decoder, der das für dich erledigt.
- Das Ergebnis sieht aus wie zufällige Zeichen: Die Daten sind binär, etwa ein Bild, eine PDF oder ein ZIP. Das Tool sagt dir dann, dass es Binärdaten sind, erkennt nach Möglichkeit den Dateityp und lässt dich die Datei mit Herunterladen speichern.
Kodieren in der Kommandozeile
Unter Linux kodiert base64 datei.txt und base64 -d datei.b64 dekodiert. Unter macOS gibt es denselben Befehl base64, ältere Versionen nutzen -D zum Dekodieren. In der Windows PowerShell kodiert [Convert]::ToBase64String([IO.File]::ReadAllBytes("datei.bin")) eine Datei, und certutil -encode eingabe ausgabe funktioniert in der Eingabeaufforderung, fügt aber Kopfzeilen mit BEGIN und END hinzu. Für schnelle Tests mit Text ist das Browser-Tool schneller und lässt die Daten nicht in deinem Shell-Verlauf zurück.