EMZETT.
Login

Base64

Kurz: Eine Kodierung, die beliebige Daten in einen Text aus 64 druckbaren Zeichen verwandelt, damit sie in Mails, URLs oder JSON verschickt werden können.

Genauer: Die 64 Zeichen sind A–Z, a–z, 0–9, + und / (dazu = zum Auffüllen). Base64 ist keine Verschlüsselung: Jeder kann die Daten mit einem Handgriff zurückverwandeln. Es dient nur dazu, Binärdaten (Bilder, Dateien, Schlüssel) durch Systeme zu schleusen, die nur Text vertragen.

Im Detail

Wie es funktioniert

Drei Bytes (24 Bit) werden in vier Gruppen zu je 6 Bit geteilt; jede Gruppe wird in eines der 64 Zeichen übersetzt. Dadurch wird der Text rund ein Drittel länger als die Originaldaten. Ist die Länge kein Vielfaches von drei, füllen ein oder zwei = am Ende auf.

"Hallo"  →  SGFsbG8=

Varianten

Base64URL ersetzt + und / durch - und _ und lässt das = weg, damit der Text in einer URL oder einem Dateinamen unverändert bleibt. Das nutzen zum Beispiel JWT.

Typische Einsatzorte

  • Data-URLs: Ein kleines Bild direkt im HTML oder CSS einbetten: src="data:image/png;base64,iVBOR...". Das spart eine Anfrage, bläht aber die Datei auf und lässt sich nicht getrennt zwischenspeichern; nur für sehr kleine Bilder sinnvoll.
  • E-Mail-Anhänge (MIME) werden so übertragen.
  • HTTP Basic Authentication: Authorization: Basic base64(name:passwort). Weil das nur Kodierung ist, darf es nie ohne HTTPS genutzt werden.
  • Schlüssel und Zertifikate (PEM-Dateien) sind Base64-Text zwischen Zeilen wie -----BEGIN CERTIFICATE-----.

Umlaute und Sonderzeichen

Base64 arbeitet mit Bytes, nicht mit Zeichen. Text muss deshalb vorher in Bytes übersetzt werden, normalerweise mit UTF-8. In JavaScript liefert btoa("ä") einen Fehler oder ein falsches Ergebnis, wenn man den Text nicht zuvor mit TextEncoder in UTF-8-Bytes umwandelt.

Häufiger Irrtum

„Das ist doch verschlüsselt, das sieht ja unleserlich aus.“ Nein. Passwörter oder geheime Daten in Base64 abzulegen schützt nichts. Zum Schutz braucht man echte Verschlüsselung oder bei Passwörtern ein Hash-Verfahren mit Salz.

Siehe auch: Unicode, URL, JWT, WebP