Dieser Inhalt wurde automatisch aus dem Englischen übersetzt, und kann Fehler enthalten. Erfahre mehr über dieses Experiment.

View in English Always switch to English

Base64

Base64 ist eine Gruppe ähnlicher Binär-zu-Text-Codierung Schemata, die Binärdaten in einem ASCII-Zeichenfolgenformat darstellen, indem sie in eine Radix-64-Repräsentation umgewandelt werden. Der Begriff Base64 stammt von einer spezifischen MIME-Inhaltstransfer-Codierung.

Base64-Codierungsschemata werden häufig verwendet, um Binärdaten zu codieren, die in Medien gespeichert oder übertragen werden, die nur mit ASCII-Text (oder einer Obermenge von ASCII, die immer noch nicht beliebige Binärdaten akzeptiert) umgehen können. Dadurch wird sichergestellt, dass die Daten während des Transports unverändert bleiben. Häufige Anwendungen von Base64 umfassen:

  • E-Mail über MIME
  • Speicherung komplexer Daten in XML
  • Kodierung von Binärdaten, damit sie in einer data: URL enthalten sein können

Base64-Zeichen

Wenn der Begriff "Base64" alleine verwendet wird, um auf einen bestimmten Algorithmus zu verweisen, spricht man typischerweise von der Version von Base64, die in RFC 4648, Abschnitt 4 beschrieben ist. Diese verwendet das folgende Alphabet zur Darstellung der Radix-64-Digits, zusammen mit = als Auffüllzeichen:

ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/

URL- und dateinamen-sicheres Base64

Eine häufige Variante dieser Definition erlaubt nur Zeichen, die sicher in Dateinamen und URL-Werten verwendet werden können. Diese Version, definiert in RFC 4648, Abschnitt 5, verzichtet auf Auffüllung und ersetzt + und / durch - und _.

Sie benötigen diese Kodierung nicht, wenn Sie die Daten nicht in einem Pfadsegment oder Abfrageparameter platzieren — zum Beispiel haben data URLs weder noch und können die standardmäßige Base64-Codierung verwenden.

Vergrößerung der kodierten Größe

Jedes Base64-Digit repräsentiert 6 Bit Daten (64 = 26). Daher können drei 8-Bit-Bytes der Eingabezeichenfolge/Binärdatei (3×8 Bit = 24 Bit) durch vier 6-Bit Base64-Digits (4×6 = 24 Bit) dargestellt werden.

Dies bedeutet, dass die Base64-Version einer Zeichenfolge oder Datei typischerweise ungefähr ein Drittel größer als ihre Quelle ist (die genaue Größenvergrößerung hängt von verschiedenen Faktoren ab, wie der absoluten Länge der Zeichenfolge, ihrer Länge modulo 3 und ob Auffüllzeichen verwendet werden).

Letztes Stück

Die Base64-Zeichenfolge kann in Blöcke von 4 Zeichen unterteilt werden, wobei der letzte Block möglicherweise weniger als 4 Zeichen enthält. Der letzte Block kann mit =-Zeichen aufgefüllt werden, um genau 4 Zeichen lang zu sein. Ohne Auffüllzeichen kann der letzte Block einer der folgenden sein:

  • 2 Zeichen: kodiert 12 Bit, die 1 Byte (8 Bit) Daten repräsentieren
  • 3 Zeichen: kodiert 18 Bit, die 2 Bytes (16 Bit) Daten repräsentieren
  • 4 Zeichen: kodiert 24 Bit, die 3 Bytes (24 Bit) Daten repräsentieren

In den ersten beiden Fällen können die Zeichen 4 oder 2 zusätzliche nachfolgende Bits haben, die keine Daten repräsentieren. In diesem Fall verlangt RFC 4648 von Kodierern, diese Bits auf null zu setzen, und Decodierer dazu, optional einen Fehler auszulösen, wenn sie nicht null sind. Beispielsweise, wenn die kodierten Daten ein einzelnes Byte 0b01010101 sind, dann benötigt es zwei Zeichen 0b010101 (V) und 0b010000 (Q), wobei das zweite Zeichen 4 nachfolgende Bits auf null gesetzt hat. Das Dekodieren von VR== (wo das zweite Zeichen 0b010001 repräsentiert) ergibt technisch dasselbe Byte 0b01010101, aber der Decoder könnte aufgrund der nicht auf null gesetzten nachfolgenden Bits einen Fehler auslösen.

JavaScript-Unterstützung

Die Uint8Array-Klasse bietet die Methoden Uint8Array.fromBase64(), Uint8Array.prototype.toBase64() und Uint8Array.prototype.setFromBase64() zur Konvertierung zu/von Base64-Zeichenfolgen.

Browser bieten auch nativ zwei JavaScript-Funktionen zum Dekodieren und Kodieren von Base64-Zeichenfolgen:

Hinweis: Base64 ist eine binäre Kodierung statt einer Textkodierung, aber btoa und atob wurden zur Webplattform hinzugefügt, bevor sie binäre Datentypen unterstützte. Folglich verwenden die beiden Funktionen Zeichenfolgen, um Binärdaten darzustellen, wobei der Codepunkt jedes Zeichens den Wert jedes Bytes repräsentiert. Dies hat zu einem häufigen Missverständnis geführt, dass btoa verwendet werden kann, um beliebige Textdaten zu kodieren — zum Beispiel, um eine Base64-data:-URL eines Text- oder HTML-Dokuments zu erstellen.

Die Byte-zu-Codepunkt-Entsprechung hält jedoch nur zuverlässig für Codepunkte bis 0x7f wahr. Darüber hinaus werden Codepunkte über 0xff dazu führen, dass btoa einen Fehler auslöst, da sie den Maximalwert für 1 Byte überschreiten. Der nächste Abschnitt beschreibt, wie dieses Limit umgangen werden kann, wenn beliebiger Unicode-Text kodiert wird.

Siehe auch