Zum Hauptinhalt springen

← Zurück zum Blog

Base64 vs. URL-Kodierung: Was ist der Unterschied?

Base64 und URL-Kodierung sind beide „mach das sicher als Text übertragbar”-Werkzeuge und daher leicht zu verwechseln. Aber sie lösen verschiedene Probleme. Hier der Unterschied.

Base64: Binär → Text

Base64 verwandelt beliebige Binärdaten (ein Bild, eine Datei, rohe Bytes) in reine ASCII-Buchstaben, -Ziffern sowie +, / und =. Es vergrößert die Daten um etwa 33 % und ist keine Verschlüsselung — jeder kann es dekodieren. Nutze es, wenn ein reiner Textkanal Binärdaten transportieren muss:

  • Ein Bild als data:-URI in HTML/CSS einbetten
  • E-Mail-Anhänge (MIME)
  • Kleine Binär-Blobs in JSON oder ein Token packen

Mehr dazu in Ist Base64 Verschlüsselung? (Spoiler: nein).

URL-Kodierung: sicherer Text in einer URL

URL-Kodierung (auch Prozent-Kodierung) ersetzt Zeichen, die in einer URL besondere Bedeutung haben oder nicht erlaubt sind, durch %XX-Codes — ein Leerzeichen wird zu %20, & zu %26 usw. Nutze sie, um Text zu platzieren in:

  • einer Query-String (?q=hello%20world)
  • einem Pfadsegment
  • Formularübermittlungen

Details im URL-Kodierungs-Leitfaden.

Die Unterschiede auf einen Blick

  • Zweck: Base64 = Binäres als Text tragen · URL-Kodierung = Text in einer URL sicher machen.
  • Ausgabe: Base64 = A–Z a–z 0–9 + / = · URL-Kodierung = Originaltext mit %XX-Escapes.
  • Größe: Base64 ≈ +33 % · URL-Kodierung vergrößert nur die escapten Zeichen.

Sie kombinieren sich oft

Ein Base64-String kann +, / und = enthalten, die in URLs unsicher sind — willst du Base64 in eine URL setzen, kodierst du es entweder per URL oder nutzt Base64URL (eine URL-sichere Variante mit - und _).

Beide ausprobieren (lokal)

Faustregel: Base64, um Binäres als Text zu tragen; URL-Kodierung, um Text sicher in einen Link zu setzen.

Ein durchgerechnetes Beispiel

Nimm den Text a b&c. Jeder Kodierer behandelt ihn völlig anders:

Eingabe:        a b&c
URL-kodiert:    a%20b%26c
Base64-kodiert: YSBiJmM=

Die URL-Kodierung lässt die Buchstaben in Ruhe und escapt nur das Leerzeichen und das &, das Ergebnis bleibt also lesbar. Base64 schreibt jedes Byte in sein eigenes Alphabet um — vier Zeichen je drei Bytes — sodass die Ausgabe der Eingabe in nichts mehr ähnelt, dafür aber einen Kanal übersteht, der nur wenige sichere Zeichen zulässt. Andere Aufgabe, andere Ausgabe.

Häufige Fehlanwendungen

  • Base64 zum „Verstecken” von Daten. Es lässt sich in einem Schritt umkehren und schützt daher nichts — behandle es als Umschlag, nicht als Schloss. Siehe Ist Base64 Verschlüsselung?
  • Eine ganze URL URL-kodieren. Kodiere die Teile — einen Query-Wert, ein Pfadsegment — nicht die gesamte Adresse, sonst wird aus https:// ein https%3A%2F%2F und der Link ist kaputt.
  • Doppelte Kodierung. Einen bereits kodierten Wert erneut zu kodieren ergibt %2520 (ein %, das selbst escapt wurde). Kommt ein Leerzeichen als %2520 statt %20 an, wurde zweimal kodiert.
  • Base64s + und / vergessen. Reines Base64 ist nicht URL-sicher; nutze in einer URL Base64URL oder kodiere die Zeichenkette per URL.

Wo jedes vorkommt

  • Base64 taucht auf, wo Binäres in Text reist: data:-URIs, E-Mail-MIME-Teile, die Segmente eines JWT und in JSON gestopfte Binärfelder.
  • URL-Kodierung taucht auf, wo Text in einer URL reist: Query-Strings, Formular-Posts (application/x-www-form-urlencoded) und Pfadsegmente mit Leerzeichen oder Nicht-ASCII-Zeichen.

FAQ

Kann ich Base64 statt URL-Kodierung nutzen?

Nein — sie sind nicht austauschbar. Base64 macht Binäres textsicher; URL-Kodierung macht Text URL-sicher. Rohes Base64 in einer URL kann sie wegen +, / und = trotzdem zerbrechen.

Warum endet mein Base64 mit =?

Das ist Padding, damit die Ausgabelänge ein Vielfaches von vier ist. Es ist normal, und manche URL-sicheren Varianten lassen es weg.

Macht eine der beiden Daten sicher?

Nein. Kodierung betrifft das Format, nicht die Geheimhaltung — sie ist von jedem umkehrbar. Für Vertraulichkeit brauchst du Verschlüsselung, für Manipulationsschutz einen Hash oder eine Signatur.