Base64 Encoder/Decoder
Text in Base64 kodieren und dekodieren. Standard und URL-safe Modus. Mit Statistik und voller UTF-8/Umlaut-Unterstützung.
🔐 Hinweis: Base64 ist keine Verschlüsselung! Jeder kann Base64 dekodieren. Für sensible Daten echte Verschlüsselung verwenden. UTF-8-Umlaute werden korrekt verarbeitet.
Base64 — Der universelle Binär-zu-Text-Encoder
Base64 ist ein essentielles Kodierungsverfahren der modernen Computertechnik, das beliebige Binärdaten in druckbare ASCII-Zeichen umwandelt. Diese Kodierung löst ein fundamentales Problem: Wie können binäre Daten (Bilder, Audiodateien, verschlüsselte Daten) sicher über textbasierte Protokolle wie E-Mail, HTTP oder JSON übertragen werden? Base64 transformiert jeden 3-Byte-Block in vier ASCII-Zeichen aus einem definierten 64-Zeichen-Alphabet.
Mathematische Grundlagen und Algorithmus
Der Kodierungsprozess:
Base64 funktioniert durch Bit-Manipulation. Drei Eingabebytes (24 Bit) werden in vier 6-Bit-Gruppen aufgeteilt. Da 6 Bit 64 verschiedene Werte (0-63) repräsentieren können, wird jeder Wert einem Zeichen aus dem Base64-Alphabet zugeordnet.
Schritt-für-Schritt-Beispiel mit "Man":
- 'M' = 77 (decimal) = 01001101 (binary)
- 'a' = 97 (decimal) = 01100001 (binary)
- 'n' = 110 (decimal) = 01101110 (binary)
- Kombiniert: 010011010110000101101110 (24 Bit)
- Aufgeteilt: 010011 | 010110 | 000101 | 101110
- Dezimal: 19 | 22 | 5 | 46
- Base64: T | W | F | u → "TWFu"
Das Base64-Alphabet und Varianten
Standard Base64 (RFC 4648):
Zeichen 0-63 entsprechen: A-Z (0-25), a-z (26-51), 0-9 (52-61), + (62), / (63). Das Padding-Zeichen = wird verwendet, wenn die Eingabelänge nicht durch 3 teilbar ist.
URL-safe Base64:
Ersetzt + durch - und / durch _, da diese in URLs problematisch sind. Padding mit = ist optional, da es am Ende einer URL verwirrend sein kann. Diese Variante wird in JWT (JSON Web Tokens), URL-Parametern und Dateinamen verwendet.
Base64url ohne Padding:
Moderne Anwendungen verzichten oft auf das = Padding, da es sich beim Dekodieren aus der Stringlänge ableiten lässt: Länge % 4 = 1 ist ungültig, bei 2 oder 3 werden entsprechend 2 oder 1 = ergänzt.
Historische Entwicklung und Standards
Ursprünge in der E-Mail-Technologie:
Base64 entstand in den 1980ern für MIME (Multipurpose Internet Mail Extensions). Frühe E-Mail-Systeme konnten nur 7-Bit-ASCII übertragen. Binäre Anhänge mussten in Text umgewandelt werden. RFC 2045 (1996) formalisierte Base64 für MIME, RFC 3548 (2003) erweiterte es für allgemeine Zwecke, RFC 4648 (2006) ist der aktuelle Standard.
PGP und Privacy-Enhanced Mail:
Pretty Good Privacy (PGP) nutzte Base64 bereits in den 1990ern für verschlüsselte Nachrichten. Das typische "-----BEGIN PGP MESSAGE-----" Format verwendet Base64-kodierten Content.
Moderne Anwendungsgebiete
Data URIs (RFC 2397):
Data-URLs ermöglichen die Einbettung von Binärdaten direkt in HTML oder CSS: data:image/png;base64,iVBORw0KGgoAAAANSU.... Dies reduziert HTTP-Requests, vergrößert aber die HTML-Größe um 33%.
JSON Web Tokens (JWT):
JWTs nutzen Base64url für Header und Payload: header.payload.signature. Jeder Teil ist JSON, das Base64url-kodiert wurde. Dies ermöglicht sichere, selbst-validierbare Tokens ohne Datenbank-Lookups.
HTTP Basic Authentication:
Der Authorization-Header verwendet Base64: Authorization: Basic dXNlcjpwYXNzd29yZA== (dekodiert: "user:password"). Wichtig: Dies ist keine Verschlüsselung – immer HTTPS verwenden!
Moderne Web-APIs:
Viele APIs kodieren binäre Daten in Base64 für JSON-Übertragung. GraphQL, REST-APIs und Webhooks nutzen Base64 für Dateien, verschlüsselte Tokens und binäre Payload-Teile.
Performance und Speicherüberlegungen
33% Overhead-Kalkulation:
Jede 3-Byte-Gruppe wird zu 4 ASCII-Zeichen. Mathematisch: 4/3 = 1,33... = 33% Vergrößerung. Bei großen Dateien ist dieser Overhead erheblich. Eine 1MB-Datei wird zu 1,33MB Base64-Text.
CPU-Overhead:
En-/Dekodierung ist CPU-intensiv. Moderne Prozessoren haben optimierte Instruktionen (SIMD), aber Base64-Operationen sind trotzdem 2-3x langsamer als rohe Binärkopien. Für große Datenmengen sollten binäre Übertragungswege bevorzugt werden.
Memory-Verbrauch:
JavaScript-Implementierungen müssen oft die gesamte kodierte Zeichenkette im Speicher halten. Bei großen Dateien führt das zu doppeltem Memory-Verbrauch (Original + Base64). Streaming-Encoder können das vermeiden.
Sicherheitsaspekte und Missverständnisse
Base64 ist KEINE Verschlüsselung:
Ein weit verbreiteter Irrtum! Base64 ist eine Kodierung, keine Verschlüsselung. Jeder kann Base64 ohne Schlüssel dekodieren. Für echte Sicherheit nutzen Sie AES, RSA oder andere kryptographische Verfahren.
Timing-Attacks bei Secrets:
Beim Vergleich von Base64-kodierten Secrets können Timing-Attacks auftreten. Verwenden Sie konstante-Zeit-Vergleichsfunktionen für sicherheitsrelevante Anwendungen.
Padding-Oracle-Attacks:
Falsche Padding-Behandlung kann Informationen über verschlüsselte Daten preisgeben. Moderne Bibliotheken handhaben das korrekt, aber Custom-Implementierungen sind riskant.
Praktische Implementierung und Best Practices
Browser-APIs:
Moderne Browser bieten btoa() (encode) und atob() (decode) Funktionen. Diese unterstützen jedoch nur Latin-1-Zeichen. Für Unicode/UTF-8 ist eine Zwischenkonvertierung nötig: btoa(unescape(encodeURIComponent(text))).
Node.js Buffer-API:
Buffer.from(data).toString('base64') für Enkodierung und Buffer.from(base64, 'base64') für Dekodierung. Die Buffer-API ist hochoptimiert und sollte nativen Implementierungen vorgezogen werden.
Streaming für große Daten:
Für Dateien >10MB implementieren Sie Streaming-Encoder/Decoder. Diese verarbeiten Daten in Chunks und vermeiden Memory-Probleme. Die Transform-Streams-API in Node.js eignet sich perfekt dafür.
Alternative Kodierungsverfahren
Base32: Verwendet nur A-Z und 2-7, ist case-insensitive und für Menschen lesbarer. 25% mehr Overhead als Base64, aber robuster gegen Übertragungsfehler.
Base85/Ascii85: Effizienter als Base64 (20% statt 33% Overhead), aber komplexere Implementierung und begrenzte Zeichensatz-Kompatibilität.
Hexadezimal: 100% Overhead, aber menschenlesbar und debuggingfreundlich. Ideal für kryptographische Hashes und kleine Binärdaten.