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 dXNlcjpwYXNzgesendet – 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älthttps%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.dewird zuxn--mller-kva.de.
Typische Fehler
- Doppelte Kodierung: Aus
%20wird%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:
- 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. - Prozentzeichen zählen: Folgen auf
%immer zwei Hexziffern, ist es Prozentkodierung. Taucht%25auf, wurde wahrscheinlich doppelt kodiert. - Schrittweise dekodieren: Erst eine Ebene entschlüsseln und prüfen, ob lesbarer Text entsteht. Manche Systeme verschachteln Kodierungen, etwa Base64 in einem URL-Parameter.
- 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.