Wer einen Blick in die Entwicklertools seines Browsers wirft, stößt unweigerlich auf kryptische Zeichenketten in Authorization-Headern, JWT-Tokens oder src-Attributen von Bildern. Meist handelt es sich dabei um Base64. Obwohl es eines der fundamentalsten Verfahren in der Webentwicklung ist, wird es oft mit Verschlüsselung verwechselt. In diesem Guide erfahren Sie, wie Base64 wirklich funktioniert und warum wir es heute mehr denn je brauchen.
Warum benötigen wir Base64 überhaupt?
Das Kernproblem liegt in der Geschichte der Datenübertragung: Viele ältere Protokolle, wie etwa SMTP für E-Mails, wurden ausschließlich für den Transport von 7-Bit-ASCII-Text entwickelt. Versucht man, eine binäre Datei (wie ein Foto oder ein PDF) direkt über solche Systeme zu senden, werden die Daten beschädigt, da binäre Steuerzeichen falsch interpretiert werden.
Base64 schließt diese Lücke. Es wandelt beliebige Binärdaten in eine Textform um, die nur aus 64 druckbaren ASCII-Zeichen besteht. Dieser Zeichensatz umfasst die Großbuchstaben A–Z, Kleinbuchstaben a–z, Ziffern 0–9 sowie die Zeichen + und /. Das Gleichheitszeichen (=) dient am Ende als Füllzeichen (Padding), um sicherzustellen, dass die Länge der Ausgabe immer durch vier teilbar ist.
Wie funktioniert der Algorithmus technisch?
Der Prozess zerlegt die Eingabedaten in 3-Byte-Blöcke (24 Bit). Diese 24 Bits werden wiederum in vier Pakete zu je 6 Bit unterteilt. Da 6 Bit genau 64 mögliche Werte (0 bis 63) darstellen können, wird jeder Wert direkt einem Zeichen aus dem Base64-Alphabet zugeordnet. Da aus 3 Eingabebytes immer 4 Textzeichen werden, erhöht sich das Datenvolumen bei der Kodierung um etwa 33 %.
Eingabe-Bytes: M=77 (01001101) a=97 (01100001) n=110 (01101110) 24-Bit-Strom: 010011 010110 000101 101110 Base64-Index: 19 22 5 46 Base64-Zeichen: T W F u Resultat: TWFu
Falls die Eingabe nicht exakt durch 3 teilbar ist, wird mit Padding-Zeichen (=) aufgefüllt. Ein einzelnes = bedeutet, dass ein Byte aufgefüllt wurde, während == für zwei zusätzliche Bytes steht.
Base64 vs. Base64URL: Der feine Unterschied
In URLs können die Standard-Base64-Zeichen + und / Probleme verursachen, da sie dort eine reservierte Bedeutung haben. Hier kommt Base64URL zum Einsatz: Das Pluszeichen wird durch ein Minus (-) und der Schrägstrich durch einen Unterstrich (_) ersetzt. Zudem wird das Padding oft weggelassen, um die URLs kompakt zu halten. Dies ist der Standard für JSON Web Tokens (JWT).
Typische Einsatzgebiete für Webentwickler
1. JSON Web Tokens (JWT)
In der modernen Authentifizierung sind JWTs allgegenwärtig. Ein Token besteht aus drei Teilen: Header.Payload.Signature. Sowohl der Header als auch die Payload sind einfache JSON-Objekte, die mittels Base64URL kodiert wurden, damit sie problemlos in HTTP-Headern übertragen werden können.
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.
eyJzdWIiOiJ1c2VyXzEyMyIsInJvbGUiOiJhZG1pbiIsImV4cCI6MTcxNzAwMDAwMH0.
[signatur]
Dekodierte Payload:
{"sub":"user_123","role":"admin","exp":1717000000}
2. HTTP Basic Authentication
Beim klassischen Basic Auth werden Benutzername und Passwort kombiniert (user:pass) und als Base64-String im Authorization-Header gesendet. Dies dient nicht der Sicherheit, sondern lediglich der Formatierung für das Protokoll.
// admin:s3cr3t → Base64 kodiert Authorization: Basic YWRtaW46czNjcjN0
Wichtig: Da Base64 extrem leicht umkehrbar ist, darf Basic Auth niemals über unverschlüsseltes HTTP ohne TLS/SSL verwendet werden!
3. Data URIs (Inline-Ressourcen)
Mit Data URIs können Sie kleine Bilder, Icons oder Fonts direkt in HTML- oder CSS-Dateien einbetten. Das spart zusätzliche HTTP-Anfragen und beschleunigt unter Umständen das Rendern kritischer Pfade.
<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAA..." alt="Logo">
Beachten Sie jedoch: Da Base64 die Datei um ein Drittel vergrößert, sollten Sie diese Technik nur für sehr kleine Dateien (unter 10 KB) nutzen, da sonst die Ladezeit der HTML-Seite negativ beeinflusst wird.
4. E-Mail-Anhänge (MIME)
Wenn Sie eine Datei per E-Mail versenden, sorgt der MIME-Standard (Multipurpose Internet Mail Extensions) dafür, dass das Binärformat in Base64 umgewandelt wird. Erst so können Mailserver weltweit die Daten verlustfrei weiterleiten.
Base64 in der Praxis: Code-Beispiele
$text = "Hallo Welt!"; $encoded = base64_encode($text); echo $encoded; // SGFsbG8gV2VsdCE= $decoded = base64_decode($encoded); echo $decoded; // Hallo Welt!
// Kodieren eines Strings
const b64 = btoa("Hallo Welt!");
console.log(b64); // SGFsbG8gV2VsdCE=
// Dekodieren
const original = atob(b64);
console.log(original); // Hallo Welt!
// Für Unicode/UTF-8 Strings (z.B. Emojis):
const bytes = new TextEncoder().encode("Kaffee ☕");
const b64_utf8 = btoa(String.fromCharCode(...bytes));
Häufige Missverständnisse
- Base64 ist KEINE Verschlüsselung. Es gibt keinen Schlüssel. Jeder, der den String sieht, kann ihn sofort dekodieren. Es dient rein der Datenformatierung.
- Base64 komprimiert nicht. Im Gegenteil: Die Daten werden um ca. 33% größer. Zur Platzersparnis sollten Sie gzip oder Brotli verwenden.
- Base64 ist kein Hashing. Ein Hash (wie SHA-256) ist eine Einwegfunktion. Base64 ist verlustfrei umkehrbar.
Nutzen Sie unsere kostenlosen Base64-Tools
Kodieren oder dekodieren Sie beliebige Daten direkt im Browser – schnell und sicher.