Was ist Base64-Kodierung und wann setzt man sie ein

· 9 Min. Lesezeit

Wenn Sie mit APIs, E-Mail-Systemen oder Webentwicklung arbeiten, sind Sie Base64 begegnet, auch wenn Sie es nicht erkannt haben. Diese langen Zeichenketten aus Buchstaben und Ziffern, die am Anfang eines E-Mail-Anhangs, in einer data:-URL in CSS oder im mittleren Segment eines JWT-Tokens wie Kauderwelsch aussehen? Das ist Base64. Es ist eines der ältesten und still tragenden Stücke der Internet-Klempnerei, und fast jede Software, die Sie nutzen, lehnt sich irgendwo darauf.

Eine kurze Geschichte von Base64

Base64 gehört zu einer Familie, die «radix-64» oder «druckbare Kodierungen» heißt, deren Aufgabe es ist, beliebige Bytes mit dem kleinen Alphabet von Zeichen darzustellen, das ein textbasiertes System garantiert unverändert durchlässt. Das früheste weit verbreitete Mitglied ist uuencode, von Mary Ann Horton an der UC Berkeley um 1980 geschrieben, um binäre Dateien über Usenet und E-Mail zu verschicken, als diese Systeme alles über 7-Bit-ASCII verstümmelten.

Das Base64-Alphabet selbst wurde erstmals in RFC 989 (1987) für Privacy-Enhanced Mail (PEM) standardisiert, einen frühen Versuch signierter und verschlüsselter E-Mail. PEM ist gestorben, aber sein Kodierungsschema überlebte und wurde in RFC 1421 (1993) und dann in der MIME-Spezifikation (RFC 1521 und 1522 in 1993, überarbeitet zu RFCs 2045-2049 in 1996) kanonisiert. MIME machte Base64 zur Standardweise, binäre Dateien an E-Mails anzuhängen, und von dort breitete sich die Kodierung auf nahezu jeden reinen Texttransport im Internet aus.

2006 konsolidierte die IETF die verstreuten Base64-Definitionen in RFC 4648, die Base64, Base32 und Base16 in einem einzigen Dokument definiert. RFC 4648 definierte in Abschnitt 5 auch die URL-sichere Variante, die die beiden nicht-URL-freundlichen Zeichen (+ und /) gegen - und _ tauschte. JSON Web Tokens (RFC 7519, 2015) standardisierten auf URL-sicheres Base64 mit entferntem Padding. Heute hängen jeder E-Mail-Anhang, jedes PEM-kodierte Zertifikat, jede data:-URL, jedes JWT und jede multipart-Upload-Grenze von Base64 ab.

Wie Base64 funktioniert: die Mathematik

Base64 nimmt drei Eingabe-Bytes (24 Bit) und schreibt sie als vier Ausgabezeichen (je 6 Bit) um, mit einem 64-Symbol-Alphabet. Die Zuordnung ist fest:

IndexbereichZeichen
0-25A-Z
26-51a-z
52-610-9
62+ (Standard) oder - (URL-sicher)
63/ (Standard) oder _ (URL-sicher)

So wird aus Hello:

Die Ausgabe ist immer ein Vielfaches von 4 Zeichen. Wenn die Eingabelänge modulo 3 gleich 1 ist, bekommen Sie zwei = Padding-Zeichen; ist sie 2, eines; ist sie 0, keines. Padding wird manchmal entfernt (besonders in JWT und in URL-Fragmenten), und Dekoder müssen das tolerieren.

Der 33-%-Overhead kommt aus dieser 3-zu-4-Expansion: jedes 3 Bytes der Eingabe werden 4 Zeichen der Ausgabe, ein Drittel mehr. Es gibt keinen Weg, das zu reduzieren, ohne das Alphabet zu ändern (Base85 / Ascii85 expandiert nur um 25 % mit 85 druckbaren Zeichen, zum Preis eines komplexeren Encoders).

Gängige Anwendungsfälle

E-Mail-Anhänge. SMTP, das Protokoll, das 95 % der E-Mails zwischen Servern transportiert, wurde 1982 (RFC 821) für 7-Bit-ASCII entworfen. Jeder binäre Anhang, den Sie senden (ein Bild, ein PDF, ein ZIP), wird vor der Übertragung von Ihrem Mailclient in Base64 kodiert und vom Empfänger-Client dekodiert. Die MIME-Header in der E-Mail sagen dem Empfänger, welche Teile Base64 und welche reiner Text sind.

Data-URLs in HTML und CSS. Eine URL data:image/png;base64,iVBORw0KGgo... bettet eine binäre Datei direkt ins Dokument ein. Nützlich für kleine Icons unter 1-2 KB, wo die eingesparte HTTP-Anfrage den 33-%-Overhead und den Verlust des Cachings überwiegt.

API-Nutzlasten. Wenn eine JSON- oder XML-API einen binären Wert annehmen muss (eine hochgeladene Datei, eine Unterschrift, ein Profilbild), ist das Standardmuster, die Bytes in Base64 zu kodieren und als String-Feld zu schicken. Der Empfänger dekodiert sie serverseitig. So funktioniert die Bildeingabe von OpenAI, so empfängt Stripe Datei-Uploads, und so akzeptieren die meisten Cloud-Funktionen Binäreingaben.

HTTP-Basic-Authentifizierung. Der Header Authorization: Basic <token> trägt ein Base64-kodiertes username:password-Paar (RFC 7617). Das ist Kodierung, keine Verschlüsselung: wer den Header sieht, sieht das Passwort. Basic Auth verlangt aus diesem Grund HTTPS.

Zertifikate und Schlüssel. PEM-Dateien (-----BEGIN CERTIFICATE----- ... -----END CERTIFICATE-----) umhüllen einen Base64-kodierten Blob DER-kodierter ASN.1-Bytes. Jedes TLS-Zertifikat, jede SSH-Schlüsseldatei, jedes Code-Signing-Zertifikat ist Base64 in einem PEM-Umschlag.

JWT-Tokens. Ein JWT sind drei URL-sichere Base64-Segmente, durch Punkte getrennt: <header>.<payload>.<signature>. Die Base64-Kodierung erlaubt einem JWT, sicher in Headern, URLs und Cookies zu reisen.

Wie kodieren und dekodieren

  1. Kodieren oder dekodieren wählen: die Konvertierungsrichtung auswählen.
  2. Text einfügen oder Datei hochladen: Text direkt eingeben oder eine Datei per Drag-and-drop (bis 5 MB für browserseitige Kodierung).
  3. Variante wählen: Standard-Base64 für E-Mail und Zertifikate, URL-sicher für JWT und URL-Fragmente. Das Werkzeug nutzt Standard als Voreinstellung.
  4. Ergebnis kopieren: die Ausgabe aktualisiert sich sofort. In die Zwischenablage kopieren oder den Download-Button für lange Ausgaben nutzen.

Varianten von Base64

Mehrere Base64-ähnliche Kodierungen existieren für spezifische Situationen:

VarianteUnterschiedeWo eingesetzt
Standard (RFC 4648 §4)A-Z, a-z, 0-9, +, /, = PaddingE-Mail (MIME), PEM, generischer Binärtransport
URL-sicher (RFC 4648 §5)+ wird -, / wird _JWT, URL-Fragmente, Dateinamen
MIME (RFC 2045)Zeilenumbrüche alle 76 ZeichenE-Mail-Body, Mail-Header (mit =?utf-8?B?...?=)
crypt(3) / htpasswdAnderes Alphabet (./0-9A-Za-z)Alte Unix-Passwort-Hashes (DES-basiert)
Base64Url ohne PaddingURL-sicher ohne abschließendes =JWT (nach RFC 7515)
Base32 (RFC 4648 §6)32-Zeichen-Alphabet, schreibungsunabhängigTOTP-Secrets, Onion-Adressen
Base5858-Zeichen-Alphabet (kein 0, O, I, l)Bitcoin-Adressen, IPFS-CIDs
Ascii85 / Base8585-Zeichen-Alphabet, 25 % OverheadPDF, PostScript

Meist wollen Sie entweder Standard- oder URL-sicheres Base64. Die anderen tauchen in spezifischen Protokollen auf.

Wann Base64 verwenden

Verwenden Sie es, wenn:

Verwenden Sie es nicht, wenn:

Häufige Fallen

Alternativen und benachbarte Kodierungen

Base64 ist der Standard, nicht die einzige Option. Die richtige Wahl hängt vom Kanal und vom Größenbudget ab.

KodierungOverheadStärkeAm besten für
Hex (Base16)100 %Trivial zu lesen, jedes Byte sind zwei ZeichenDebug-Ausgabe, kurze Identifier, Farbcodes
Base32 (RFC 4648)60 %Schreibungsunabhängig, keine ähnlichen ZeichenTOTP-Secrets, Onion-Adressen, Voice-Diktat
Base64 Standard33 %Universell, jede Sprache hat esE-Mail, PEM, generischer Transport
Base64 URL-sicher33 %URL- und dateinamen-sicherJWT, URL-Fragmente
Base58~37 %Keine 0/O/I/l-Verwechslung, keine SonderzeichenBitcoin-Adressen, IPFS-CIDs
Ascii85 / Base8525 %Dichter als Base64PDF, PostScript
Base91~22 %Noch dichter, komplexerSelten, Nischen-Kompressionskontexte
Multipart-Upload0 %Nativer Binärtransport via HTTPDatei-Uploads (Browser machen das für Sie)
gzip + Base64variiertManchmal kleiner als rohes Base64Vorkomprimierte Nutzlasten

Für den Großteil der täglichen Arbeit ist die Antwort Base64 (Standard oder URL-sicher). Für binäre Datei-Uploads über HTTP ist die richtige Antwort meist multipart/form-data, das gar nicht kodiert.

Datenschutz und der Encoder

Der Base64-Encoder und -Decoder läuft vollständig in Ihrem Browser. Der eingegebene Text oder die Datei wird von JavaScript auf Ihrem Gerät verarbeitet, das Ergebnis auf der Seite gerendert, und nichts wird an einen Server geschickt. Nichts wird protokolliert, nichts bleibt nach dem Verlassen der Seite gespeichert, und kein Analytics-Tag sieht den Inhalt. Für Dinge, die Sie in Base64 kodieren könnten (PEM-Zertifikate, private Schlüssel, JWT-Nutzlasten aus Produktionssystemen, Entwürfe von API-Anfragen mit echten Kundendaten), ist dieser strikt lokale Ablauf die richtige Voreinstellung. Das gesamte Werkzeug läuft offline, sobald die Seite geladen ist, was Sie überprüfen können, indem Sie das Netzwerk abschalten und dieselbe Eingabe erneut kodieren.

Häufig gestellte Fragen

Schützt Base64-Kodierung meine Daten?

Nein. Base64 ist Kodierung, keine Verschlüsselung. Jeder kann eine Base64-Zeichenkette dekodieren, sie bietet keinerlei Sicherheit. Wenn Sie Daten schützen möchten, nutzen Sie echte Verschlüsselung (AES, RSA usw.).

Warum macht Base64 Dateien größer?

Base64-Kodierung erhöht die Datengröße um etwa 33 %. Drei Bytes binärer Daten werden zu vier Base64-Zeichen. Dieser Mehraufwand ist der Preis dafür, binäre Daten als Text sicher übertragen zu können.

Kann ich auch Dateien kodieren, nicht nur Text?

Ja. Jede Datei (Bilder, PDFs, Audio) lässt sich in Base64 kodieren. Das wird häufig genutzt, um kleine Bilder direkt in HTML oder CSS als Daten-URLs einzubetten.

Wann sollte ich Base64 NICHT verwenden?

Nicht für große Dateien. Ein 1-MB-Bild wird als Base64-Text 1,33 MB groß und der Browser kann es nicht separat zwischenspeichern. Für alles über wenige KB ist es effizienter, die Datei normal zu servieren.

What is the difference between standard Base64 and URL-safe Base64?

Standard Base64 (RFC 4648 section 4) uses the characters A-Z, a-z, 0-9, +, / with = padding. URL-safe Base64 (RFC 4648 section 5) swaps + for - and / for _ so the string is safe to drop into a URL or a filename without percent-encoding. JWT tokens use the URL-safe variant.

Why does Base64 sometimes have one or two = signs at the end?

The = is padding. Base64 encodes input in 3-byte groups; if the input length is not a multiple of 3, the last group is padded with zero bits and one or two = characters mark the missing bytes. One = means one missing byte, two = means two missing bytes.