webtrajans
de

Base64 und URL-Kodierung: Daten sicher transportieren, nicht verschlüsseln

Base64 verpackt Binärdaten in harmlosen Text, URL-Kodierung macht Sonderzeichen in Adressen sicher. Beides begegnet Ihnen in E-Mails, APIs und Links. Hier lernen Sie, wie die Verfahren funktionieren und welche Fehler am häufigsten passieren.

Aktualisiert: 5 Min. Lesezeit

Computer speichern alles als Bytes, aber viele Übertragungswege vertragen nur einen kleinen Zeichenvorrat. E-Mail war ursprünglich für 7-Bit-Text gedacht, URLs erlauben nur bestimmte Zeichen, JSON verlangt gültigen Text. Kodierungen lösen dieses Problem: Sie übersetzen beliebige Daten in eine sichere Darstellung und am Ziel wieder zurück. Die beiden wichtigsten im Web sind Base64 und die Prozentkodierung (URL-Encoding). Beide sind keine Sicherheitsmaßnahme – sie sorgen nur dafür, dass Daten unbeschädigt ankommen.

Base64: Binärdaten als Text

Base64 nimmt jeweils 3 Byte (24 Bit), teilt sie in 4 Gruppen à 6 Bit und bildet jede Gruppe auf eines von 64 Zeichen ab: A–Z, a–z, 0–9, + und /. Geht die Länge nicht auf, wird mit = aufgefüllt.

Text:    Hallo
Bytes:   48 61 6C 6C 6F
Base64:  SGFsbG8=

Umlaute werden zuerst in UTF-8 umgewandelt (ü = 2 Byte), dann kodiert:

Grüße   →  R3LDvMOfZQ==

Mit dem Base64-Kodierer wandeln Sie Text und Dateien in beide Richtungen um.

Größenzuwachs

Aus 3 Byte werden 4 Zeichen, also +33 %. Eine 3-MB-Datei wird als Base64 rund 4 MB groß. Deshalb belegen E-Mail-Anhänge beim Versand mehr Platz als auf der Festplatte – mehr dazu im Ratgeber PDF verkleinern.

Wo Base64 eingesetzt wird

  • E-Mail-Anhänge (MIME): Jede angehängte Datei wird Base64-kodiert übertragen.
  • Data-URLs: Kleine Bilder oder Schriften direkt in HTML oder CSS einbetten:
<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAA..." alt="Logo">
  • HTTP Basic Auth: Benutzername und Passwort werden als Basic dXNlcjpwYXNz gesendet – lesbar für jeden, der mitliest. Nur über HTTPS sicher.
  • JSON Web Tokens (JWT): Header und Inhalt sind Base64url-kodiert und damit für jeden lesbar; geschützt ist nur die Signatur gegen Veränderung.
  • Zertifikate und Schlüssel im PEM-Format (-----BEGIN CERTIFICATE-----).
  • Binärdaten in JSON, das selbst nur Text kennt.

Base64url

Die Zeichen +, / und = haben in URLs eine eigene Bedeutung. Die Variante Base64url ersetzt + durch - und / durch _ und lässt das = meist weg. Sie wird in JWTs und Dateinamen verwendet. Wer Base64url mit einem normalen Base64-Dekoder liest, erhält Fehler oder falsche Daten.

Wann Data-URLs sinnvoll sind

Für winzige Grafiken (Icons unter wenigen KB) sparen sie einen HTTP-Request. Für größere Bilder sind sie nachteilig: 33 % größer, nicht separat cachebar und sie blähen HTML und CSS auf. Größere Bilder gehören als eigene Datei optimiert eingebunden; siehe Bilder für das Web optimieren.

URL-Kodierung (Prozentkodierung)

URLs dürfen laut RFC 3986 nur bestimmte Zeichen ungeschützt enthalten: Buchstaben A–Z und a–z, Ziffern sowie - . _ ~. Zeichen mit Sonderbedeutung wie ? & = # / trennen Teile der URL. Alles andere muss als % plus zwei Hexziffern pro Byte geschrieben werden.

Zeichen kodiert Warum
Leerzeichen %20 (in Formularen auch +) nicht erlaubt
& %26 trennt Parameter
= %3D trennt Name und Wert
? %3F beginnt die Abfrage
# %23 beginnt das Fragment
ü %C3%BC UTF-8, 2 Byte
ß %C3%9F UTF-8, 2 Byte
€ %E2%82%AC UTF-8, 3 Byte

Beispiel: Ein Suchparameter mit dem Wert „Straße & Söhne“:

https://example.de/suche?q=Stra%C3%9Fe%20%26%20S%C3%B6hne

Ohne Kodierung würde der Server das & als Beginn eines neuen Parameters lesen und nur „Straße “ suchen. Mit dem URL-Kodierer erzeugen und entschlüsseln Sie solche Werte.

Was man (nicht) kodiert

  • Nur Werte kodieren, nicht die ganze URL: Wer https:// mitkodiert, erhält https%3A%2F%2F – unbrauchbar als Link.
  • In JavaScript: encodeURIComponent() für einzelne Parameterwerte, encodeURI() für eine ganze URL, die nur noch Leerzeichen oder Umlaute enthält.
  • Domains mit Umlauten werden nicht prozentkodiert, sondern per Punycode umgewandelt: müller.de wird zu xn--mller-kva.de.

Typische Fehler

  • Doppelte Kodierung: Aus %20 wird %2520, weil das Prozentzeichen erneut kodiert wurde. Symptom: In Formularen oder Weiterleitungen erscheinen kryptische Zeichen.
  • Falscher Zeichensatz: Alte Systeme kodieren „ü“ als %FC (ISO-8859-1). Moderne Software erwartet UTF-8 (%C3%BC); das Ergebnis sind Zeichen wie „ü“.
  • Plus-Zeichen in Werten: Eine Telefonnummer +49… in einem Formularparameter wird ohne Kodierung als Leerzeichen gelesen. Richtig: %2B49….
  • Base64 als Passwortschutz: API-Schlüssel oder Passwörter in Base64 sind im Klartext lesbar. Für Geheimnisse braucht es Verschlüsselung, für Passwörter Hash-Verfahren – siehe Ratgeber Sicheres Passwort.
  • Zeilenumbrüche in Base64: E-Mail-Base64 enthält Umbrüche alle 76 Zeichen. Manche Dekoder erwarten eine durchgehende Zeichenkette.

Kodierung, Verschlüsselung, Hashing

Verfahren Umkehrbar Schlüssel nötig Zweck
Kodierung (Base64, URL) ja, für jeden nein sicherer Transport
Verschlüsselung (AES, TLS) ja, mit Schlüssel ja Vertraulichkeit
Hashing (SHA-256, bcrypt) nein nein Integrität, Passwortspeicherung

Kodierung in der Praxis prüfen

Wenn Daten „kaputt“ ankommen, hilft ein systematischer Blick:

  1. Zeichen ansehen: Endet ein String auf = oder == und besteht nur aus Buchstaben, Ziffern, + und /, ist er sehr wahrscheinlich Base64. Enthält er - und _, ist es Base64url.
  2. Prozentzeichen zählen: Folgen auf % immer zwei Hexziffern, ist es Prozentkodierung. Taucht %25 auf, wurde wahrscheinlich doppelt kodiert.
  3. Schrittweise dekodieren: Erst eine Ebene entschlüsseln und prüfen, ob lesbarer Text entsteht. Manche Systeme verschachteln Kodierungen, etwa Base64 in einem URL-Parameter.
  4. Zeichensatz prüfen: Erscheinen nach dem Dekodieren Zeichen wie „ä“ statt „ä“, wurde UTF-8 als Latin-1 gelesen.

Auf der Kommandozeile helfen base64 -d (Linux) bzw. base64 -D (ältere macOS-Versionen) sowie python3 -c "import urllib.parse,sys; print(urllib.parse.unquote(sys.argv[1]))" 'Stra%C3%9Fe'.

Checkliste

  • Base64 für Binärdaten in Textkanälen, nicht zum Schutz von Daten.
  • 33 % Größenzuwachs einplanen.
  • In URLs nur Parameterwerte kodieren, UTF-8 verwenden.
  • Doppelte Kodierung vermeiden, Plus-Zeichen beachten.
  • Base64url und Standard-Base64 nicht verwechseln.

Häufige Fragen

Ist Base64 eine Verschlüsselung?

Nein. Base64 ist eine umkehrbare Kodierung ohne Schlüssel. Jeder kann einen Base64-Text sofort zurückwandeln. Passwörter oder vertrauliche Daten sind damit nicht geschützt.

Warum werden Dateien durch Base64 größer?

Base64 stellt je 3 Byte durch 4 Zeichen dar. Die Daten wachsen dadurch um etwa ein Drittel, bei E-Mails kommen noch Zeilenumbrüche hinzu.

Wie wird ein Leerzeichen in einer URL kodiert?

Als %20. In Formulardaten (application/x-www-form-urlencoded), etwa in Suchanfragen, wird es oft als + dargestellt.

Wie werden Umlaute in URLs kodiert?

Sie werden zuerst in UTF-8-Bytes zerlegt und jedes Byte wird als %XX geschrieben. Aus ü wird %C3%BC, aus ß wird %C3%9F.

Weitere Ratgeber