Base64
Base64 ist eine Gruppe ähnlicher Binär-zu-Text-Codierung Schemata, die Binärdaten in einem ASCII-Zeichenkettenformat darstellen, indem sie in eine Radix-64-Darstellung umgewandelt werden. Der Begriff Base64 stammt von einer spezifischen MIME-Inhaltsübertragungscodierung.
Base64-Codierungsschemata werden häufig verwendet, um Binärdaten zur Speicherung oder Übertragung über Medien zu codieren, die nur mit ASCII-Text (oder einem Superset von ASCII, das immer noch keine willkürlichen Binärdaten akzeptiert) umgehen können. Dies stellt sicher, dass die Daten während des Transports intakt und unverändert bleiben. Häufige Anwendungen von Base64 umfassen:
Base64-Zeichen
Wenn der Begriff "Base64" alleine verwendet wird, um auf einen bestimmten Algorithmus zu verweisen, bezieht er sich typischerweise auf die in RFC 4648, Abschnitt 4 dargestellte Version von Base64, die das folgende Alphabet verwendet, um die Radix-64-Ziffern darzustellen, zusammen mit = als Füllzeichen:
ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/
URL- und dateinamen-sicheres Base64
Eine übliche Variante dieser Definition erlaubt nur Zeichen, die in Dateinamen und URL-Werten sicher verwendet werden können.
Diese Version, definiert in RFC 4648, Abschnitt 5, lässt die Polsterung weg und ersetzt + und / durch - und _.
Diese Codierung brauchen Sie nicht, wenn die Daten nicht in einen Pfadsegment oder Abfrageparameter eingefügt werden — zum Beispiel haben Data URLs weder das eine noch das andere und können die standardmäßige Base64-Codierung verwenden.
Erhöhte Größe bei der Codierung
Jede Base64-Ziffer repräsentiert 6 Bits an Daten (64 = 26). Drei 8-Bit-Bytes der Eingabezeichenkette/Binärdatei (3×8 Bits = 24 Bits) können durch vier 6-Bit Base64-Ziffern dargestellt werden (4×6 = 24 Bits).
Das bedeutet, dass die Base64-Version einer Zeichenkette oder Datei typischerweise ungefähr ein Drittel größer ist als ihre Quelle (die genaue Größensteigerung hängt von verschiedenen Faktoren ab, wie der absoluten Länge der Zeichenkette, ihrer Länge modulo 3 und ob Füllzeichen verwendet werden).
Letztes Stück
Die Base64-Zeichenkette kann in Stücke von 4 Zeichen unterteilt werden, wobei das letzte Stück möglicherweise weniger als 4 Zeichen hat. Das letzte Stück kann mit = Zeichen aufgefüllt werden, damit es genau 4 Zeichen lang ist. Ohne Füllzeichen kann das letzte Stück eine der folgenden Formen haben:
- 2 Zeichen: codiert 12 Bits, die 1 Byte (8 Bits) an Daten repräsentieren
- 3 Zeichen: codiert 18 Bits, die 2 Bytes (16 Bits) an Daten repräsentieren
- 4 Zeichen: codiert 24 Bits, die 3 Bytes (24 Bits) an Daten repräsentieren
In den ersten beiden Fällen können die Zeichen 4 oder 2 zusätzliche Nachlaufbits haben, die keine Daten darstellen. In diesem Fall erfordert RFC 4648, dass Encoder diese Bits auf Null setzen und Decoder optional einen Fehler auslösen, wenn sie nicht Null sind. Zum Beispiel, wenn die codierten Daten ein einzelnes Byte 0b01010101 sind, werden zwei Zeichen benötigt, 0b010101 (V) und 0b010000 (Q), wobei das zweite Zeichen 4 Nachlaufbits zu Null gesetzt hat. Das Dekodieren von VR== (wo das zweite Zeichen 0b010001 darstellt) ergibt technisch gesehen dasselbe Byte 0b01010101, aber der Decoder kann aufgrund der nicht-nullenden Nachlaufbits einen Fehler auslösen.
JavaScript-Unterstützung
Die Klasse Uint8Array bietet die Methoden Uint8Array.fromBase64(), Uint8Array.prototype.toBase64() und Uint8Array.prototype.setFromBase64() für die Umwandlung zu/von Base64-Zeichenketten.
Browser bieten auch zwei JavaScript-Funktionen für das Dekodieren und Codieren von Base64-Zeichenketten nativ an:
Window.btoa()(auch in Workern verfügbar): erstellt eine Base64-codierte ASCII-Zeichenkette aus einer Zeichenkette von Binärdaten ("btoa" sollte als "binary to ASCII" gelesen werden).Window.atob()(auch in Workern verfügbar): dekodiert eine Base64-codierte Zeichenkette ("atob" sollte als "ASCII to binary" gelesen werden).
Hinweis:
Base64 ist eine binäre Codierung und keine Textcodierung, aber btoa und atob wurden zur Webplattform hinzugefügt, bevor diese Binärdatentypen unterstützte. Deshalb verwenden die beiden Funktionen Zeichenketten, um Binärdaten darzustellen, wobei der Codepunkt jedes Zeichens den Wert jedes Bytes repräsentiert. Das hat zu dem weit verbreiteten Missverständnis geführt, dass btoa verwendet werden kann, um beliebige Textdaten zu codieren — zum Beispiel, um eine Base64 data: URL eines Text- oder HTML-Dokuments zu erstellen.
Die Byte-zu-Codepunkt-Korrespondenz gilt jedoch nur zuverlässig für Codepunkte bis 0x7f. Darüber hinaus führen Codepunkte über 0xff dazu, dass btoa einen Fehler auslöst, weil sie den Höchstwert für 1 Byte überschreiten. Der Abschnitt "Unicode Strings" von Window.btoa() erklärt, wie dieses Problem umgangen werden kann, wenn beliebiger Unicode-Text codiert wird.