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:
7-Bit-Amerikanischer Standardcode. 128 Zeichen: englische Buchstaben, Ziffern, Satzzeichen und Steuercodes.
Erweiterter ASCII für westeuropäische Sprachen. Fügte 128 Zeichen hinzu. Nicht geeignet für nicht-lateinische Schriften.
Universeller Zeichensatz, der alle Schriftsysteme der Welt abdeckt. Definiert Codepunkte für über 149.000 Zeichen.
Variable-Breite-Kodierung von Unicode mit 1–4 Bytes pro Zeichen. ASCII-kompatibel. Die dominante Kodierung im Web.
Variable-Breite-Kodierung mit 2 oder 4 Bytes pro Zeichen. Intern von Windows, Java und JavaScript-Strings verwendet.
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:
| Eingabe | Hex-Bytes | Base64 |
|---|---|---|
| "Man" | 77 61 6E | TWFu |
| "Ma" | 4D 61 | TWE= |
| "M" | 4D | TQ== |
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
| Zeichen | Kodiert | Hinweise |
|---|---|---|
| Space | %20 | Am häufigsten; in Formular-Submissions als + in application/x-www-form-urlencoded verwendet |
| & | %26 | Query-String-Trennzeichen; muss kodiert werden, wenn als Literalwert verwendet |
| = | %3D | Schlüssel-Wert-Trennzeichen in Query-Strings; kodieren wenn als Datum verwendet |
| + | %2B | Wird als Leerzeichen in application/x-www-form-urlencoded interpretiert; kodieren um + zu erhalten |
| # | %23 | Fragment-Bezeichner; kodieren wenn als Literaldaten in einem Pfad oder Query verwendet |
| / | %2F | Pfadsegment-Trennzeichen; kodieren wenn als Literaldaten, nicht als Pfad-Delimiter verwendet |
| : | %3A | Schema-Trennzeichen; in Pfad- und Query-Kontexten kodieren |
| @ | %40 | In 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
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 betten Dateiinhalt direkt in HTML oder CSS ein: data:image/png;base64,.... Das eliminiert HTTP-Anfragen auf Kosten erhöhter Dokumentgröße.
E-Mail wurde für 7-Bit-ASCII entworfen. Binäre Anhänge werden von MIME vor der Übertragung Base64-kodiert.
JWT-Tokens verwenden Base64url-Kodierung für alle drei Teile, was sie URL-sicher macht.
Alle benutzerseitigen Daten in URL-Query-Strings müssen prozent-kodiert werden.
Nicht-ASCII-Domainnamen werden mit Punycode (xn--Präfix) für die DNS-Kompatibilität kodiert.
Häufig gestellte Fragen
Nein. Base64 ist Kodierung, keine Verschlüsselung. Es ist eine umkehrbare Transformation ohne geheimen Schlüssel.
Base64 verarbeitet Eingaben in 3-Byte-Gruppen. Wenn die Eingabe kein Vielfaches von 3 ist, wird =-Auffüllung hinzugefügt.
Base64url ist eine URL-sichere Variante, die + durch - und / durch _ ersetzt und typischerweise =-Auffüllung weglässt. JWTs verwenden Base64url.
encodeURIComponent für einzelne Werte verwenden. encodeURI für eine vollständige URL-Zeichenfolge, bei der URL-Strukturzeichen erhalten bleiben sollen.
UTF-8 ist ASCII-kompatibel und platzsparend für lateinischen Text. HTTP und HTML verwenden standardmäßig UTF-8.
Prozent-Kodierung stellt Zeichen als % gefolgt von ihrem zweistelligen Hexadezimal-Bytewert dar. Ein Leerzeichen ist %20.
Base64 erhöht die Datengröße um ~33% und fügt CPU-Overhead hinzu. URL-Kodierung fügt minimalen Overhead hinzu.
Punycode ist eine Kodierung zur Darstellung von Unicode-Zeichen im ASCII-kompatiblen DNS-System.