Base64

7 tools

Was ist Kodierung?

Kodierung ist der Prozess, Daten von einer Darstellung in eine andere zu konvertieren. In der Webentwicklung wird Kodierung verwendet, um Daten sicher durch Kanäle zu übertragen, die für einen begrenzten Zeichensatz ausgelegt sind.

Zeichenkodierung definiert, wie Textzeichen auf Bytes abgebildet werden. Base64-Kodierung wandelt Binärdaten in ASCII-Text um. URL-Kodierung macht beliebigen Text für die Verwendung in URLs sicher.

Geschichte der Zeichenkodierung

Zeichenkodierung ist die Abbildung von Zeichen auf ihre binären Darstellungen:

ASCII1963
128 Zeichen

7-Bit-Amerikanischer Standardcode. 128 Zeichen: englische Buchstaben, Ziffern, Satzzeichen und Steuercodes.

Latin-11987
256 Zeichen

Erweiterter ASCII für westeuropäische Sprachen. Fügte 128 Zeichen hinzu. Nicht geeignet für nicht-lateinische Schriften.

Unicode1991
149 186+ Zeichen

Universeller Zeichensatz, der alle Schriftsysteme der Welt abdeckt. Definiert Codepunkte für über 149.000 Zeichen.

UTF-81993
Alle Unicode Zeichen

Variable-Breite-Kodierung von Unicode mit 1–4 Bytes pro Zeichen. ASCII-kompatibel. Die dominante Kodierung im Web.

UTF-161996
Alle Unicode Zeichen

Variable-Breite-Kodierung mit 2 oder 4 Bytes pro Zeichen. Intern von Windows, Java und JavaScript-Strings verwendet.

UTF-322000
Alle Unicode Zeichen

Feste Breitenkodierung: immer 4 Bytes pro Zeichen. Im Web selten zu sehen.

Warum UTF-8 gewann

UTF-8 wurde dominant, weil es rückwärtskompatibel mit ASCII ist, selbstsynchronisierend und platzsparend für lateinischen Text. Jedes ASCII-Dokument ist ein gültiges UTF-8-Dokument.

Base64-Kodierung

Base64 wandelt Binärdaten in eine Textdarstellung um, die nur 64 druckbare ASCII-Zeichen verwendet. Dies ist notwendig, wenn Binärdaten durch rein textbasierte Kanäle übertragen werden müssen.

Wie es funktioniert

Base64 gruppiert Eingabebytes in 3-Byte-Blöcke und kodiert jeden Block als 4 Base64-Zeichen. Bei nicht durch 3 teilbaren Eingaben werden =-Auffüllzeichen hinzugefügt:

EingabeHex-BytesBase64
"Man"77 61 6ETWFu
"Ma"4D 61TWE=
"M"4DTQ==

Die =-Auffüllzeichen am Ende zeigen an, wie viele Bytes für die Vervollständigung der letzten 3-Byte-Gruppe fehlten. Standard-Base64 erzeugt immer Ausgaben, deren Länge ein Vielfaches von 4 ist.

URL-Kodierung

URLs können nur einen begrenzten Satz sicherer ASCII-Zeichen enthalten. Alle anderen Zeichen müssen prozent-kodiert werden.

Prozent-Kodierung ersetzt jedes unsichere Byte durch % gefolgt von zwei Hexadezimalziffern.

Häufig kodierte Zeichen

ZeichenKodiertHinweise
Space%20Am häufigsten; in Formular-Submissions als + in application/x-www-form-urlencoded verwendet
&%26Query-String-Trennzeichen; muss kodiert werden, wenn als Literalwert verwendet
=%3DSchlüssel-Wert-Trennzeichen in Query-Strings; kodieren wenn als Datum verwendet
+%2BWird als Leerzeichen in application/x-www-form-urlencoded interpretiert; kodieren um + zu erhalten
#%23Fragment-Bezeichner; kodieren wenn als Literaldaten in einem Pfad oder Query verwendet
/%2FPfadsegment-Trennzeichen; kodieren wenn als Literaldaten, nicht als Pfad-Delimiter verwendet
:%3ASchema-Trennzeichen; in Pfad- und Query-Kontexten kodieren
@%40In mailto: und auth verwendet; kodieren wenn als Literaldaten verwendet

encodeURI vs. encodeURIComponent

JavaScript stellt zwei Kodierungsfunktionen mit unterschiedlichem Umfang bereit. encodeURI kodiert eine vollständige URL. encodeURIComponent kodiert eine URL-Komponente — es kodiert alle Zeichen außer A-Z, a-z, 0-9, -, _, ., ~.

Wo Kodierung in der Webentwicklung vorkommt

HTTP-Basisauthentifizierung

Der Authorization: Basic-Header kodiert Anmeldedaten als Base64(Benutzername:Passwort). Das ist Kodierung für Transportzwecke, KEINE Sicherheit. Immer HTTPS mit Basic Auth verwenden.

Daten-URIs

Daten-URIs betten Dateiinhalt direkt in HTML oder CSS ein: data:image/png;base64,.... Das eliminiert HTTP-Anfragen auf Kosten erhöhter Dokumentgröße.

MIME-E-Mail-Anhänge

E-Mail wurde für 7-Bit-ASCII entworfen. Binäre Anhänge werden von MIME vor der Übertragung Base64-kodiert.

JWT-Tokens

JWT-Tokens verwenden Base64url-Kodierung für alle drei Teile, was sie URL-sicher macht.

Query-String-Parameter

Alle benutzerseitigen Daten in URL-Query-Strings müssen prozent-kodiert werden.

Internationalisierte Domainnamen

Nicht-ASCII-Domainnamen werden mit Punycode (xn--Präfix) für die DNS-Kompatibilität kodiert.

Häufig gestellte Fragen

Ist Base64 eine Form der Verschlüsselung?

Nein. Base64 ist Kodierung, keine Verschlüsselung. Es ist eine umkehrbare Transformation ohne geheimen Schlüssel.

Warum endet die Base64-Ausgabe manchmal auf ==?

Base64 verarbeitet Eingaben in 3-Byte-Gruppen. Wenn die Eingabe kein Vielfaches von 3 ist, wird =-Auffüllung hinzugefügt.

Was ist der Unterschied zwischen Base64 und Base64url?

Base64url ist eine URL-sichere Variante, die + durch - und / durch _ ersetzt und typischerweise =-Auffüllung weglässt. JWTs verwenden Base64url.

Wann soll encodeURI vs. encodeURIComponent verwendet werden?

encodeURIComponent für einzelne Werte verwenden. encodeURI für eine vollständige URL-Zeichenfolge, bei der URL-Strukturzeichen erhalten bleiben sollen.

Warum ist UTF-8 besser als UTF-16 für das Web?

UTF-8 ist ASCII-kompatibel und platzsparend für lateinischen Text. HTTP und HTML verwenden standardmäßig UTF-8.

Was ist Prozent-Kodierung?

Prozent-Kodierung stellt Zeichen als % gefolgt von ihrem zweistelligen Hexadezimal-Bytewert dar. Ein Leerzeichen ist %20.

Beeinflusst Kodierung die Performance?

Base64 erhöht die Datengröße um ~33% und fügt CPU-Overhead hinzu. URL-Kodierung fügt minimalen Overhead hinzu.

Was ist Punycode?

Punycode ist eine Kodierung zur Darstellung von Unicode-Zeichen im ASCII-kompatiblen DNS-System.