Zum Inhalt springen
🚀 10 Tools live, für immer kostenlos — der Werkzeugkasten wächst weiter
Startseite›Blog›Base64 erklärt: wie Kodieren und Dekodieren wirklich funktionieren
Anleitungen

Base64 erklärt: wie Kodieren und Dekodieren wirklich funktionieren

Wie Base64 drei Bytes tatsächlich in vier Zeichen verwandelt, warum es zwei Alphabete gibt und wann welches zählt, wozu das =-Padding da ist, warum „Base64-kodiert“ nie eine Sicherheitsmaßnahme ist, und wie man Ausgabe diagnostiziert, die zu Buchstabensalat dekodiert.

✍ Vom Gründer & CEO, Team BuildToolForge🗓 2026-10-17⏱ 11 Min.
base64encodingdecodingurl-safeutf-8
Leitfaden Sicherheits-Tool2026

Base64
einfach erklärt

Wie Base64 Bytes in Text verwandelt

Standard & URL-safe · Padding · UTF-8

base64 · stdin
$ echo -n "Hi!" | base64
outSGkh
$ echo -n "SGkh" | base64 -d
outHi!
✓ 3 Bytes werden zu 4 Zeichen · = füllt die letzte Gruppe auf
Alphabet & Padding
A-Z
0 bis 25
a-z
26 bis 51
0-9
52 bis 61
+ oder -
62
/ oder _
63
=
Padding
StandardalphabetURL-safe-VarianteUTF-8 unterstütztKeine Verschlüsselung

Was Base64 wirklich ist

Base64 ist eine Art, beliebige Bytes mit nur 64 sicheren Zeichen zu schreiben. Das ist die ganze Idee. Es ist keine Verschlüsselung, keine Komprimierung und keine Prüfsumme. Es löst ein schmales Problem: Sie haben Binärdaten, und der Kanal, durch den sie müssen, nimmt nur Text an.

Dieser Kanal kann ein E-Mail-Body sein, ein JSON-Feld, eine URL, ein HTTP-Header, eine YAML-Konfiguration oder eine PEM-Datei. Schicken Sie rohe Bytes, und irgendetwas auf dem Weg beschädigt sie: ein Nullbyte kürzt eine Zeichenkette, ein 0x0D wird von einer Zeilenende-Umwandlung umgeschrieben, ein hohes Byte wird in einem anderen Zeichensatz neu gedeutet. Base64 umgeht all das, weil es nur Buchstaben, Ziffern und zwei Satzzeichen verwendet — und die überleben es alle, als Text behandelt zu werden.

Der Preis ist die Größe: die Ausgabe ist etwa ein Drittel größer als die Eingabe. Das ist der Handel, und er lohnt sich fast immer, denn die Alternative sind Daten, die beschädigt ankommen.

Wie aus drei Bytes vier Zeichen werden

Base64 arbeitet in Gruppen von drei Bytes. Drei Bytes sind 24 Bit, und 24 teilt sich glatt in vier Gruppen von sechs. Jede 6-Bit-Gruppe indiziert ein Alphabet aus 64 Zeichen, drei Bytes Eingabe ergeben also vier Zeichen Ausgabe.

Nehmen Sie die drei Bytes von Man:

M = 77 = 01001101, a = 97 = 01100001, n = 110 = 01101110

Die Bits aneinanderhängen und neu in Sechsergruppen zerlegen:

010011 010110 000101 101110 → 19, 22, 5, 46 → T, W, F, u

Man wird also zu TWFu. Vier Zeichen, kein Padding nötig, weil die drei Bytes exakt aufgingen. Dieses „exakt aufgehen“ ist genau das Thema des nächsten Abschnitts.

Die 64 Zeichen

Die Indizes 0–25 sind A–Z, 26–51 sind a–z, 52–61 sind 0–9, und 62 und 63 sind die beiden, die allen Ärger machen. Im Standard-Base64 sind das + und /.

Das Alphabet, und warum es zwei gibt

+ und / sind in einem E-Mail-Body völlig in Ordnung und in einer URL geradezu feindlich. / ist ein Pfadtrenner und + bedeutet in einem Query-String ein Leerzeichen — ein Base64-Wert, der in eine URL geklebt wird, kann also mit veränderten Bytes zurückkommen, ohne dass irgendwo ein Fehler auftritt.

Daher base64url, eine Variante, die die ersten 62 Zeichen behält und die letzten zwei austauscht: - für + und _ für /. Es ist die Kodierung der JSON Web Tokens — wer je einen JWT von Hand gelesen hat, hat base64url gelesen — und von allem anderen, das in einer URL oder einem Dateinamen reist.

Ansonsten sind die beiden Varianten identisch, und genau das macht ihr Vermischen gefährlich. Eine Zeichenkette ohne jedes +, /, - oder _ ist in beiden gültig und dekodiert gleich. Eine, die sie enthält, dekodiert zu anderen Bytes, je nachdem welche Variante der Decoder annimmt — meist ohne jede Fehlermeldung. Unser Base64-Encoder und -Decoder nennt genau deshalb das erkannte Alphabet.

Das Padding, und warum Decoder sich darüber streiten

Die Eingabe ist selten ein Vielfaches von drei Bytes. Ein übriges Byte ergibt zwei Zeichen, zwei übrige Bytes ergeben drei, und Standard-Base64 füllt die Gruppe mit = wieder auf vier auf:

  • 3 Bytes → 4 Zeichen, kein Padding
  • 2 Bytes → 3 Zeichen + =
  • 1 Byte → 2 Zeichen + ==

Das Padding trägt keine Daten. Es existiert, damit ein Decoder, der einen aneinandergehängten Strom liest, weiß, wo ein kodierter Wert endet. Wer eine einzelne, alleinstehende Zeichenkette dekodiert, braucht es überhaupt nicht — weshalb base64url es normalerweise weglässt und = in einer URL ohnehin unpraktisch ist.

Das praktische Problem

Manche Decoder verlangen Padding und lehnen eine Zeichenkette ohne es rundheraus ab. Andere nehmen beides. Das ist der häufigste einzelne Grund, warum ein Token in einer Sprache funktioniert und in einer anderen mit einem knappen „invalid base64“ scheitert. Die Behebung heißt fast immer: Padding zurückgeben, also = anhängen, bis die Länge ein Vielfaches von vier ist. Ein Decoder, der beim Padding streng ist, ist nicht kaputt — und der Encoder, der es wegließ, auch nicht. Sie folgen verschiedenen Hälften derselben Spezifikation.

Base64 ist keine Verschlüsselung

Das verdient einen eigenen Abschnitt, weil der Fehler so verbreitet und so teuer ist. Base64 hat keinen Schlüssel. Es verbirgt nichts. Das Umkehren ist ein einziger Funktionsaufruf, in jeder Sprache verfügbar und auf jeder Seite wie dieser.

Das Musterbeispiel ist HTTP-Basic-Authentifizierung. Ein Authorization: Basic-Header ist nichts weiter als benutzer:passwort in Base64. Er sieht undurchsichtig aus, und darin liegt die Gefahr: Wer noch keinen dekodiert hat, liest ihn als „verschlüsselt“, während in Wahrheit jeder, der den Request sieht, die Zugangsdaten lesen kann. Deshalb ist Basic Auth nur über HTTPS akzeptabel — die Geheimhaltung liefert der Transport, die Kodierung liefert keine.

Dasselbe gilt für eine JWT-Payload, für einen Base64-Block in einer Konfigurationsdatei und für einen API-Key, den jemand vor dem Commit „verschleiert“ hat. Wenn zwischen einem Angreifer und Ihrem Geheimnis nur Base64 steht, steht zwischen einem Angreifer und Ihrem Geheimnis nichts. Unser Leitfaden zum Dekodieren und Debuggen von JSON Web Tokens geht genauer darauf ein, was das speziell für Tokens bedeutet.

Wo man Base64 tatsächlich begegnet

Hat man die Form einmal erkannt, sieht man sie überall:

  • E-Mail-Anhänge. MIME transportiert Binärdaten so seit den frühen Neunzigern, auf 76 Zeichen pro Zeile umgebrochen.
  • data: URIs. Ein kleines Bild, in CSS oder HTML eingebettet als data:image/png;base64,… — ein HTTP-Request gegen ein Drittel mehr Bytes getauscht.
  • PEM-Dateien. Zertifikate und Schlüssel zwischen -----BEGIN…-Markern sind Base64 des darunterliegenden DER, auf 64 Zeichen umgebrochen.
  • JWTs. Header und Payload sind base64url-kodiertes JSON; die Signatur ist base64url roher Bytes.
  • Basic Auth und manche API-Zugangsdaten. Wie oben, mit demselben Vorbehalt.
  • Binärdaten in JSON. JSON hat keinen Byte-Typ, also reisen Bytes als Base64-Zeichenkette.

Warum manches Base64 Zeilenumbrüche hat

MIME bricht bei 76 Zeichen um, PEM bei 64, weil die Formate, in denen sie leben, älter als lange Zeilen sind. Diese Umbrüche gehören nicht zu den Daten, und ein Decoder muss sie ignorieren. Die meisten tun das; einige nicht, und darum scheitert das Einfügen eines umgebrochenen PEM-Bodys in einen strengen Decoder manchmal, bis man die Zeilenumbrüche entfernt.

Der Größenaufwand, und wann er zählt

Vier Zeichen pro drei Bytes ist eine 4/3-Aufblähung — etwa 33 % — vor Padding und Zeilenumbrüchen. Für einen einmaligen Konfigurationswert ist das belanglos. Für alles auf einem heißen Pfad nicht.

Ein 10 KB großes Bild als data: URI kostet rund 13,3 KB HTML und kann, anders als ein echtes Bild, nicht separat gecacht oder verzögert geladen werden. Ein Token, das bei jedem API-Aufruf mitgeht, trägt seinen Aufwand bei jedem Request. Und Komprimierung rettet Sie nicht: Base64-Ausgabe komprimiert weit schlechter als die ursprünglichen Bytes, weil die Kodierung die Muster auf Byte-Ebene zerstört, nach denen ein Kompressor sucht. Erst komprimieren, dann kodieren — niemals umgekehrt.

Text kodieren heißt Bytes kodieren

Base64 kodiert Bytes. Es kennt keine Zeichen, also ist „kodiere diese Zeichenkette in Base64“ immer die Kurzform für „mach aus dieser Zeichenkette Bytes und kodiere dann diese Bytes“. Der Schritt dazwischen ist die Stelle, an der es schiefgeht, denn er braucht eine Zeichenkodierung — und die Spezifikation wählt keine für Sie.

In der Praxis lautet die Antwort UTF-8, und moderne APIs nehmen sie als Standard. Kodiert aber eine Seite den Text als UTF-16 oder Latin-1 und dekodiert die andere als UTF-8, dann ist das Base64 völlig gültig und der Text, der herauskommt, ist Buchstabensalat. Das Erkennungszeichen: Nicht-ASCII-Zeichen überleben schlecht, reines ASCII überlebt tadellos — denn ASCII ist eine Teilmenge von UTF-8.

Der Hin-und-zurück-Test

Wenn Sie unsicher sind, ob eine Verarbeitungskette Text korrekt behandelt: kodieren Sie eine Zeichenkette mit einem Akzent und einem nichtlateinischen Zeichen, dekodieren Sie sie wieder und vergleichen Sie. Alles, was José oder ein Emoji verstümmelt, verliert irgendwo in der Byte-Umwandlung Information — nicht im Base64 selbst.

Wenn das Dekodieren schiefgeht

Vier Diagnosen decken fast alle Fälle ab:

  • „Ungültiges Zeichen“. Etwas außerhalb des Alphabets ist hineingeraten — meist ein verirrtes Leerzeichen, ein mit der Zeichenkette kopiertes Anführungszeichen oder ein vorne stehengebliebenes data:image/png;base64,.
  • „Ungültige Länge“. Nach dem Entfernen von Leerraum ergibt die Länge modulo vier 1, was kein gültiges Base64 erzeugen kann. Unterwegs ist ein Zeichen verloren gegangen.
  • Es dekodiert, aber zu Buchstabensalat. Entweder passen die Alphabete nicht zusammen (base64url als Standard dekodiert oder umgekehrt), oder die Textkodierung passt nicht, wie oben beschrieben.
  • Es dekodiert zu Bytes, die gar kein Text sind. Das ist kein Fehler. Viel Base64 enthält ein Bild, einen Schlüssel oder eine serialisierte Struktur; ein guter Decoder zeigt Ihnen eine Hex-Ansicht, statt zu behaupten, das Ergebnis sei eine Zeichenkette.

Diese Punkte in dieser Reihenfolge durchzugehen — Zeichen, Länge, Alphabet, Kodierung — löst fast alles. Und wenn ein Wert sich einfach nirgends dekodieren lässt, ist die wahrscheinlichste Erklärung die langweiligste: er war abgeschnitten. Base64 hat keine Integritätsprüfung, also sieht eine Zeichenkette, die ihr Ende verloren hat, genau aus wie eine, die nie eines hatte.

Verwandte Tools und Leitfäden:

Häufige Fragen

Wofür wird Base64 verwendet?⌄

Base64 trägt Binärdaten durch Kanäle, die nur Text annehmen: E-Mail-Anhänge, data: URIs in CSS und HTML, Zertifikate und Schlüssel in PEM-Dateien, Binärfelder in JSON und HTTP-Header wie Authorization: Basic. Überall, wo rohe Bytes beschädigt oder abgelehnt würden, bringt Base64 sie unverändert durch.

Ist Base64 Verschlüsselung oder Kodierung?⌄

Kodierung. Es gibt keinen Schlüssel und keine Geheimhaltung — das Dekodieren ist ein einziger Funktionsaufruf, den jeder Browser erledigt. Base64 macht Bytes transportierbar, nicht sicher vor dem Mitlesen. Verwenden Sie es nie, um ein Passwort, ein Token oder einen API-Key zu schützen.

Warum endet meine Base64-Zeichenkette auf = oder ==?⌄

Das ist Padding. Base64 arbeitet in Gruppen von drei Bytes, und wenn die Eingabe nicht glatt aufgeht, wird die letzte Gruppe mit einem oder zwei =-Zeichen auf vier aufgefüllt. Das Padding trägt keine Daten; base64url lässt es meist weg und manche strengen Decoder verlangen es — die übliche Ursache für eine Zeichenkette, die in einer Sprache dekodiert und in einer anderen nicht.

Was ist der Unterschied zwischen Base64 und base64url?⌄

Zwei Zeichen und das Padding. Standard-Base64 nutzt + und / für die letzten beiden Alphabetpositionen; base64url nutzt stattdessen - und _, weil + und / in einer URL besondere Bedeutungen haben, und lässt das =-Padding normalerweise weg. JWTs verwenden base64url. Das eine als das andere zu dekodieren erzeugt lautlos andere Bytes.

Um wie viel größer macht Base64 meine Daten?⌄

Um etwa 33 %: aus je drei Bytes werden vier Zeichen, plus Padding und etwaige Zeilenumbrüche. Wenn Größe zählt, komprimieren Sie vor dem Kodieren statt danach — Base64-Ausgabe komprimiert schlecht, weil die Kodierung die Byte-Muster zerstört, auf die ein Kompressor angewiesen ist.

Über den Autor
Gründer & CEO, BuildToolForge
Folge uns auf X: @Buildtoolforge

Über 15 Jahre praktische Erfahrung in Webentwicklung und Sicherheit. Schwerpunkt ist praxisnahe Websicherheit: Websites sicher, zuverlässig und leicht zu diagnostizieren halten. BuildToolForge macht diese Prüfungen kostenlos, privat und verständlich. Die Tools laufen, wo immer möglich, in deinem Browser, und nichts, was du in ein Tool eingibst, wird gespeichert.

So schreiben wir unsere Anleitungen: Jede Anleitung entsteht aus praktischer Erfahrung, wird mit den offiziellen Standards abgeglichen und mit unseren eigenen Tools an echten Domains getestet. Wir aktualisieren die Anleitungen, wenn sich Standards oder Tools ändern. Einen Fehler gefunden? Schreib uns an contact@buildtoolforge.com.

Zuletzt aktualisiert: 2. November 2026