Toolorah

Base64 vs. URL-Kodierung: Wo liegt der Unterschied?

Base64 und URL-Kodierung (Prozentkodierung) stellen beide Daten sicher für die Übertragung dar — und werden häufig verwechselt. Sie lösen wirklich verschiedene Probleme: Base64 wandelt Binärdaten in ein textsicheres Alphabet um, während die URL-Kodierung Zeichen maskiert, die in einer URL eine besondere Bedeutung haben. Wer weiß, was wann anzuwenden ist — und in welcher Reihenfolge —, vermeidet eine ganze Klasse subtiler Fehler.

Aspekt Base64-Kodierung URL-Kodierung (Prozent)
Gelöstes Problem Binärdaten textsicher machen Text in einer URL sicher machen
Ausgabe-Alphabet A–Z, a–z, 0–9, + / Originalzeichen + %XX-Maskierungen
Größenänderung +33 % größer Nur unsichere Zeichen wachsen
Typischer Einsatz Bilder in HTML, Basic Auth, JWT Query-Parameter, Formulardaten
Aus einem Leerzeichen wird Teil der kodierten Binärdaten %20 (oder + in Formularen)
Ohne Schlüssel umkehrbar Ja Ja
Standardmäßig URL-sicher Nein (+ und / sind unsicher) Ja — genau dafür gedacht

Base64: von Binär zu Text

Base64 existiert, um Binärdaten durch Kanäle zu bringen, die nur Text akzeptieren. Je 3 Bytes Eingabe werden auf 4 druckbare ASCII-Zeichen abgebildet — deshalb ist die Ausgabe rund 33 % größer als die Eingabe. Verwendet wird das, um Bilder als Data-URI in HTML einzubetten, Zugangsdaten für HTTP Basic Authentication zu kodieren und Header sowie Payload eines JWT zu transportieren.

Base64 ist keine Verschlüsselung. Jede Base64-Zeichenkette lässt sich sofort zurückwandeln; sie bietet also keine Vertraulichkeit, sondern nur Kompatibilität.

URL-Kodierung: reservierte Zeichen maskieren

Die URL-Kodierung maskiert Zeichen mit struktureller Bedeutung in einer URL — etwa &, =, ?, / und das Leerzeichen —, damit sie als reine Daten und nicht als URL-Syntax gelesen werden. Eine Suche nach „C# & .NET“ muss im Query-Parameter zu „C%23%20%26%20.NET“ werden, sonst wird das & als Trennzeichen zwischen Parametern missverstanden.

Anders als Base64 verändert die URL-Kodierung nur die unsicheren Zeichen; sichere Zeichen (Buchstaben, Ziffern sowie - _ . ~) bleiben unangetastet. Wie stark die Ausgabe wächst, hängt also allein davon ab, wie viele Sonderzeichen die Eingabe enthält.

Wenn du beides brauchst (und die Reihenfolge zählt)

Ein verbreitetes Muster ist, Binärdaten zuerst in Base64 zu kodieren und dann in eine URL zu setzen. Standard-Base64 nutzt + und /, die in URLs unsicher sind — du musst die Base64-Zeichenkette also URL-kodieren oder Base64URL verwenden, eine Variante, die + durch - und / durch _ ersetzt. JWTs nutzen genau deshalb Base64URL, damit Tokens ohne weitere Maskierung in URLs und Headern stehen können.

Faustregel: erst Base64, um Binärdaten textsicher zu machen, dann URL-Kodierung (oder gleich Base64URL), um diesen Text URL-sicher zu machen. Die falsche Reihenfolge oder ein ausgelassener zweiter Schritt ist eine häufige Ursache für Fehler nach dem Muster „lokal geht es, im Browser nicht“.

Häufig gestellte Fragen

Ist Base64 dasselbe wie URL-Kodierung?

Nein. Base64 wandelt Binärdaten in ein Alphabet aus 64 Textzeichen um; die URL-Kodierung maskiert reservierte Zeichen innerhalb von Text, damit er in einer URL sicher ist. Sie lösen verschiedene Probleme und erzeugen für dieselbe Eingabe sehr unterschiedliche Ausgaben.

Was ist Base64URL und wie unterscheidet es sich?

Base64URL ist eine URL-sichere Variante von Base64: + wird zu -, / wird zu _, und die =-Auffüllung entfällt meist. Damit passt eine Base64-Zeichenkette ohne weitere Prozentkodierung in Pfad, Query-String oder Dateinamen. JWTs und viele OAuth-Tokens nutzen Base64URL.

Warum vergrößert Base64 Daten immer, URL-Kodierung aber nicht?

Base64 vergrößert Daten unabhängig vom Inhalt um rund 33 %, weil es 3 Bytes auf 4 Zeichen abbildet. Die URL-Kodierung verlängert nur die Zeichen, die in URLs unsicher sind; besteht dein Text überwiegend aus Buchstaben und Ziffern, ändert sich die Größe kaum.

Brauche ich nach Base64 noch URL-Kodierung?

Standard-Base64 nutzt + und /, die in URLs unsicher sind — also ja: entweder die Base64-Ausgabe zusätzlich URL-kodieren oder gleich Base64URL verwenden. Base64URL ist genau dafür gemacht und spart den zusätzlichen Schritt.