Base64
Base64 ist eine Gruppe von ähnlichen Binär-zu-Text-Kodierung Schemata, die binäre Daten in ein ASCII-String-Format darstellen, indem sie in eine Radix-64-Darstellung umgewandelt werden. Der Begriff Base64 stammt von einer spezifischen MIME-Inhaltstransferkodierung.
Base64-Kodierungsschemata werden häufig verwendet, um binäre Daten für die Speicherung oder Übertragung über Medien zu kodieren, die nur mit ASCII-Text (oder einem Superset von ASCII, das weiterhin beliebige Binärdaten ablehnt) umgehen können. Dies stellt sicher, dass die Daten während des Transports intakt bleiben und nicht verändert werden. Häufige Anwendungen von Base64 umfassen:
Base64-Zeichen
Wenn der Begriff "Base64" eigenständig zur Bezeichnung eines bestimmten Algorithmus verwendet wird, bezieht er sich typischerweise auf die Version von Base64, die in RFC 4648, Abschnitt 4 beschrieben ist und das folgende Alphabet zur Darstellung der Radix-64-Ziffern verwendet, zusammen mit =
als Auffüllzeichen:
ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/
URL- und dateinamensicheres Base64
Eine häufige Variante dieser Definition erlaubt nur Zeichen, die sicher in Dateinamen und URL-Werten verwendet werden können. Diese Version, die in RFC 4648, Abschnitt 5 definiert ist, lässt das Auffüllen weg und ersetzt +
und /
durch -
und _
.
Sie benötigen diese Kodierung nicht, wenn Sie die Daten nicht in einem Pfadsegment oder Abfrageparameter einfügen — zum Beispiel haben Data-URLs weder das eine noch das andere und können die Standard-Base64-Kodierung verwenden.
Erhöhte Größe der kodierten Daten
Jede Base64-Ziffer repräsentiert 6 Bits Daten (64 = 26). So können drei 8-Bit-Bytes der Eingabezeichenfolge/-binärdatei (3×8 Bits = 24 Bits) durch vier 6-Bit-Base64-Ziffern dargestellt werden (4×6 = 24 Bits).
Das bedeutet, dass die Base64-Version einer Zeichenfolge oder Datei typischerweise etwa ein Drittel größer ist als ihre Quelle (die genaue Größenzunahme hängt von verschiedenen Faktoren ab, wie etwa der absoluten Länge der Zeichenfolge, ihrer Länge modulo 3 und ob Auffüllzeichen verwendet werden).
Letzter Abschnitt
Die Base64-Zeichenfolge kann in Abschnitte von jeweils 4 Zeichen unterteilt werden, wobei der letzte Abschnitt eventuell weniger als 4 Zeichen hat. Der letzte Abschnitt kann mit =
-Zeichen aufgefüllt werden, sodass er genau 4 Zeichen lang ist. Ohne Auffüllzeichen kann der letzte Abschnitt einer der folgenden sein:
- 2 Zeichen: kodieren 12 Bits, die 1 Byte (8 Bits) Daten darstellen
- 3 Zeichen: kodieren 18 Bits, die 2 Bytes (16 Bits) Daten darstellen
- 4 Zeichen: kodieren 24 Bits, die 3 Bytes (24 Bits) Daten darstellen
In den ersten beiden Fällen können die Zeichen 4 oder 2 zusätzliche nachgestellte Bits haben, die keine Daten darstellen. In diesem Fall verlangt RFC 4648 von Kodierern, diese Bits auf null zu setzen, und von Dekodierern optional einen Fehler zu werfen, wenn sie nicht null sind. Wenn zum Beispiel die kodierten Daten ein einzelnes Byte 0b01010101
sind, benötigt es zwei Zeichen 0b010101
(V
) und 0b010000
(Q
), wobei das zweite Zeichen 4 nachgestellte Bits auf null gesetzt hat. Das Dekodieren von VR==
(wobei das zweite Zeichen 0b010001
darstellt) ergibt technisch dasselbe Byte 0b01010101
, aber der Dekodierer kann einen Fehler aufgrund der nicht auf null gesetzten nachgestellten Bits werfen.
Unterstützung in JavaScript
Die Uint8Array
-Klasse bietet die Methoden Uint8Array.fromBase64()
, Uint8Array.prototype.toBase64()
und Uint8Array.prototype.setFromBase64()
für die Konvertierung zu/von Base64-Zeichenfolgen.
Browser bieten auch nativ zwei JavaScript-Funktionen zur Dekodierung und Kodierung von Base64-Zeichenfolgen:
Window.btoa()
(auch in Workern verfügbar): erstellt eine Base64-kodierte ASCII-Zeichenfolge aus einer Zeichenfolge binärer Daten ("btoa" sollte als "binary to ASCII" gelesen werden).Window.atob()
(auch in Workern verfügbar): dekodiert eine Base64-kodierte Zeichenfolge ("atob" sollte als "ASCII to binary" gelesen werden).
Hinweis:
Base64 ist eine binäre Kodierung und keine Textkodierung, aber btoa
und atob
wurden der Webplattform hinzugefügt, bevor diese Binärdatentypen unterstützte. Infolgedessen verwenden die beiden Funktionen Zeichenfolgen, um Binärdaten darzustellen, wobei der Codepunkt jedes Zeichens den Wert jedes Bytes repräsentiert. Dies hat zu dem Missverständnis geführt, dass btoa
verwendet werden kann, um beliebige Textdaten zu kodieren — zum Beispiel, um eine Base64 data:
URL eines Textes oder HTML-Dokuments zu erstellen.
Allerdings hält die Byte-zu-Codepunkt-Entsprechung nur zuverlässig für Codepunkte bis 0x7f
. Darüber hinaus verursachen Codepunkte über 0xff
, dass btoa
einen Fehler wirft, weil der maximale Wert für 1 Byte überschritten wird. Der nächste Abschnitt erläutert, wie dieses Limit umgangen werden kann, wenn beliebiger Unicode-Text kodiert werden soll.