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)
- Base64-Encoder/Decoder — Binär/Text ⇄ Base64.
- URL-Encoder/Decoder — Text für URLs prozent-kodieren.
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://einhttps%3A%2F%2Fund der Link ist kaputt. - Doppelte Kodierung. Einen bereits kodierten Wert erneut zu kodieren ergibt
%2520(ein%, das selbst escapt wurde). Kommt ein Leerzeichen als%2520statt%20an, 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.