Skip to main content
Developer Tools

Base64 erklärt: Was es ist, warum es existiert und wann nicht

Was Base64-Kodierung wirklich mit Bytes macht, warum sie keine Verschlüsselung ist, und die Stellen, an denen sie 2026 noch sinnvoll eingesetzt werden kann.

By · · 6 min read

Jeder Entwickler stößt irgendwann auf Base64 - meist beim Starren auf eine hässliche Zeichenkette aus Buchstaben und beim Fragen, ob sie sensibel, verschlüsselt oder einfach… kodiert ist. Dieser Leitfaden erklärt, was Base64 eigentlich ist, die wenigen Stellen, an denen es noch seinen Platz verdient, und einige Fallen, die Stunden an Debugging-Zeit kosten.

Die 30-Sekunden-Version

Base64 ist eine Möglichkeit, beliebige Bytes nur mit 64 druckbaren ASCII-Zeichen darzustellen: A-Z, a-z, 0-9, + und /, mit = als Füllzeichen. Das ist alles. Es gibt keinen geheimen Schlüssel, keine Kompression, keine Magie. Es ist eine Zuordnung - von jedem umkehrbar, der sie erkennt.

Der Name verrät, was wichtig ist: ein 6-Bit-Alphabet (64 Symbole) zur Darstellung von 8-Bit-Daten. Dieses Missverhältnis erklärt, warum die kodierte Ausgabe immer etwa 33% größer als die Eingabe ist.

Warum Base64 überhaupt existiert

Die meisten Protokolle, auf denen das Web aufgebaut ist - SMTP, frühe HTTP-Header, URLs - wurden dafür entwickelt, Text zu übertragen. Wenn sie auf rohes Binär treffen, gehen Dinge kaputt: Steuerzeichen werden interpretiert, hohe Bytes werden abgeschnitten, Zeilenenden werden umgeschrieben. Base64 umgeht all das, indem es garantiert, dass jedes Ausgabebyte ein sicheres, druckbares Zeichen ist.

Base64 geht also nicht um Geheimhaltung - es geht um das Überleben in nur-Text-Pipelines.

Wenn Sie mit der Transformation experimentieren möchten, probieren Sie das Base64 Encode/Decode -Tool im Browser. Fügen Sie beliebigen Text ein (Text, ein kopierter Binär-Blob, was auch immer) und beobachten Sie, wie die Zuordnung Zeichen für Zeichen stattfindet.

Wie die Kodierung tatsächlich funktioniert

Base64 verarbeitet drei Eingabebytes auf einmal (24 Bit insgesamt) und wandelt sie in vier Ausgabezeichen um (je 6 Bit):

Input:   01001000 01101001 00100001    ("Hi!")
Gruppen: 010010 000110 100100 100001
Ausgabe:      S      G      k      h     -> "SGkh"

Das ist der gesamte Algorithmus. Eine Nachschlagetabelle ordnet jeden 6-Bit-Wert einem Zeichen im Alphabet zu, und der einzige interessante Randfall ist, was passiert, wenn die Eingabelänge kein Vielfaches von drei ist.

Die Padding-Regeln

Wenn die Eingabe zu Ende geht, füllt man mit Null-Bits auf und fügt = zur Ausgabe hinzu:

  • 1 verbleibendes Byte - 2 Ausgabezeichen + ==
  • 2 verbleibende Bytes - 3 Ausgabezeichen + =
  • 0 verbleibend - kein Padding

Deshalb enden Base64-Strings so häufig mit einem oder zwei =-Zeichen. Das Padding teilt dem Decoder mit, wo die ursprünglichen Daten tatsächlich geendet haben.

Die Varianten, vor denen niemand warnt

Standard-Base64 hat ein Problem im Web: + und / sind reservierte Zeichen in URLs, und = hat eine eigene Bedeutung in Query-Strings. Die Umgehungslösungen erzeugten einen kleinen Zoo von Varianten:

VarianteAlphabet-ÄnderungWo man ihr begegnet
Standard (RFC 4648 §4)+, /, =-PaddingE-Mail-Anhänge, HTTP-Body
URL-sicher (RFC 4648 §5)- statt +, _ statt /, Padding optionalJWTs, OAuth-Token, signierte URLs
MIMEStandard + Zeilenumbrüche alle 76 ZeichenE-Mail Content-Transfer-Encoding: base64

Wenn man jemals einen “invalid Base64”-Fehler debuggt, liegt es in 80% der Fälle an einem dieser Probleme:

  1. URL-sicherer String in einen Standard-Decoder gefüttert (oder umgekehrt)
  2. Fehlendes oder überschüssiges Padding
  3. Streunende Zeilenumbrüche, die aus MIME-kodierter E-Mail kopiert wurden

Wann Base64 seinen Platz tatsächlich verdient

Meistens ist Base64 übertrieben - wenn der Transport binär-sicher ist, nicht kodieren. Aber es gibt legitime Anwendungsfälle:

  • Data-URLs - kleine Bilder, Schriftarten oder SVGs direkt in CSS oder HTML einbetten mit data:image/png;base64,.... Nützlich für Sprites, E-Mail-Signaturen oder Sass-Partials, die sonst eine separate Asset-Pipeline benötigen würden. Konvertieren mit Image to Base64 .
  • Eine Data-URL in die andere Richtung dekodieren, wenn man einen String hat und die Originaldatei wiederherstellen möchte - siehe Base64 to Image .
  • JWT-Payloads - die drei durch Punkte getrennten Abschnitte eines JWT sind URL-sicheres Base64 (nicht Standard), und der mittlere Abschnitt enthält die Claims.
  • Binär-Konfiguration in YAML/JSON - wenn ein Secret-Manager einen PEM-Schlüssel in einem JSON-Feld speichern muss, vermeidet Base64 die Escaping-Hölle.
  • E-Mail-Anhänge - immer noch die dominierende Kodierung in MIME-Multipart-Bodies.

Wann man Base64 nicht verwenden sollte

Dieser Abschnitt hatte mir mehrere schlechte Design-Reviews erspart:

  • Nicht für Geheimhaltung. Jeder, der Ihren Base64-String sieht, kann ihn mit einem einzeiligen Befehl dekodieren. “Base64-kodiertes Passwort” ist eine Sicherheits-Warnung, kein Feature.
  • Nicht zur Kompression. Base64 erweitert Daten um etwa 33%. Wenn das Ziel kleinere Payloads sind, greift man zuerst zu gzip/brotli.
  • Nicht zum Speichern großer Binärdaten in einer Datenbank. Eine BLOB-Spalte ist schneller zu lesen, schneller zu schreiben und verbraucht keine 33% zusätzlichen Speicher. Base64-in-einer-TEXT-Spalte ist meist unbeabsichtigte Architektur.
  • Nicht zum Übertragen von IDs in URLs. Wenn man nur URL-sichere Bezeichner möchte, Hex oder eine URL-sichere Zufalls-ID verwenden. Base64 hat Padding-Randfälle, die man nicht haben will.

Prüfen, ob ein String “wie” Base64 aussieht

Eine schnelle Sanity-Regex:

^[A-Za-z0-9+/]*={0,2}$     (standard)
^[A-Za-z0-9_-]*={0,2}$     (URL-sicher, Padding optional)

Aber “sieht aus wie” ist genau so weit, wie die Regex einen bringt. Viele normale Strings bestehen die Formprüfung zufällig - "password" ist gültiges Base64. Um sicher zu sein, dekodiert man es und prüft, ob die resultierenden Bytes in dem Kontext sinnvoll sind.

Ein häufiger realer Fallstrick

Der mit Abstand häufigste Fehler, den ich beim Base64-Debugging geholfen habe, ist doppeltes Kodieren: Ein System, das bereits einen Base64-String gespeichert hat, kodiert ihn erneut vor dem Senden, und der Empfänger dekodiert einmal, bekommt einen Base64-String zurück und fragt sich, warum nichts geparst wird. Wenn die dekodierte Ausgabe wie mehr Base64 aussieht, dem Instinkt vertrauen und erneut dekodieren.

Die andere häufige Falle ist das Mischen von Varianten über Dienste hinweg. AWS Cognito signiert mit URL-sicherem Base64; ein selbst geschriebener Verifizierer, der Standard-Dekodierung verwendet, lehnt jedes Token ab. Der Fix ist normalerweise einzeilig (-_ -> +/, auf ein Vielfaches von 4 mit = auffüllen) - aber nur, wenn man diese Form von Fehler oft genug gesehen hat, um sie zu erkennen.

Zusammenfassung

Base64 ist eine einfache, nicht-geheime Kodierung, die Binärdaten in nur-Text-Transport überleben lässt. Sie verdient ihren Platz in Data-URLs, JWTs und E-Mail-Anhängen - und versagt still, wenn Menschen sie mit Verschlüsselung oder Kompression verwechseln. Gezielt einsetzen, die Varianten beachten, und wenn die dekodierte Ausgabe noch kodiert aussieht, erneut dekodieren.

Wenn Sie jetzt Strings untersuchen möchten, ohne etwas zu installieren, laufen alle in diesem Artikel verlinkten Tools vollständig im Browser - nichts, was Sie einfügen, verlässt die Seite.

In diesem Artikel erwähnte Tools

  • Base64 Encoder & Decoder - Encode UTF-8 text to Base64 online or decode Base64 back to UTF-8 and plain text. Runs in your browser with no upload.
  • Image to Base64 Converter - Convert an image to a Base64 data URL or raw Base64 string for HTML, CSS, and API payloads. Runs in your browser.
  • Base64 to Image Converter - Decode a Base64 string or data URL back into a viewable image and download it as PNG, JPG, WebP or GIF. Runs in your browser.

Ähnliche Artikel