base64 — Base16, Base32, Base64, Base85-Kodierungen von Daten

Quellcode: Lib/base64.py


Dieses Modul stellt Funktionen zum Kodieren von Binärdaten in druckbare ASCII-Zeichen und zum Dekodieren solcher Kodierungen zurück in Binärdaten bereit. Dies umfasst die in RFC 4648 spezifizierten Kodierungen (Base64, Base32 und Base16) sowie die nicht standardmäßigen Base85-Kodierungen.

Dieses Modul bietet zwei Schnittstellen. Die moderne Schnittstelle unterstützt die Kodierung von bytes-ähnlichen Objekten in ASCII-bytes und die Dekodierung von bytes-ähnlichen Objekten oder Strings, die ASCII enthalten, zu bytes. Beide in RFC 4648 definierten Base-64-Alphabete (normal und URL- und dateisystem-sicher) werden unterstützt.

Die Legacy-Schnittstelle unterstützt keine Dekodierung von Strings, bietet jedoch Funktionen zum Kodieren und Dekodieren zu und von Datei-Objekten. Sie unterstützt nur das Standard-Base64-Alphabet und fügt gemäß RFC 2045 alle 76 Zeichen Zeilenumbrüche ein. Beachten Sie, dass Sie, wenn Sie Unterstützung für RFC 2045 suchen, wahrscheinlich stattdessen das email-Paket betrachten sollten.

Geändert in Version 3.3: ASCII-Unicode-Strings werden nun von den Dekodierungsfunktionen der modernen Schnittstelle akzeptiert.

Geändert in Version 3.4: Bytes-ähnliche Objekte werden nun von allen Kodierungs- und Dekodierungsfunktionen in diesem Modul akzeptiert. Unterstützung für Ascii85/Base85 wurde hinzugefügt.

RFC 4648-Kodierungen

Die RFC 4648-Kodierungen eignen sich zum Kodieren von Binärdaten, damit diese sicher per E-Mail versendet, als Teile von URLs verwendet oder als Teil einer HTTP POST-Anfrage aufgenommen werden können.

base64.b64encode(s, altchars=None)

Kodiert das bytes-ähnliche Objekt s mittels Base64 und gibt die kodierten bytes zurück.

Optionale altchars müssen ein bytes-ähnliches Objekt der Länge 2 sein, das ein alternatives Alphabet für die Zeichen + und / angibt. Dies ermöglicht es einer Anwendung, z. B. URL- oder dateisystem-sichere Base64-Strings zu generieren. Der Standardwert ist None, für das das Standard-Base64-Alphabet verwendet wird.

Kann bei falscher Länge von altchars (nicht 2) einen ValueError behaupten oder auslösen. Löst einen TypeError aus, wenn altchars kein bytes-ähnliches Objekt ist.

base64.b64decode(s, altchars=None, validate=False)

Dekodiert das Base64-kodierte bytes-ähnliche Objekt oder ASCII-String s und gibt die dekodierten bytes zurück.

Optionale altchars müssen ein bytes-ähnliches Objekt oder ASCII-String der Länge 2 sein, das das alternative Alphabet angibt, das anstelle der Zeichen + und / verwendet wird.

Eine binascii.Error-Ausnahme wird ausgelöst, wenn s falsch aufgefüllt ist.

Wenn validate False (Standard) ist, werden Zeichen, die weder im normalen Base64-Alphabet noch im alternativen Alphabet enthalten sind, vor der Padding-Prüfung verworfen. Wenn validate True ist, führen diese Nicht-Alphabet-Zeichen in der Eingabe zu einem binascii.Error.

Weitere Informationen zur strikten Base64-Prüfung finden Sie unter binascii.a2b_base64().

Kann bei falscher Länge von altchars (nicht 2) einen ValueError behaupten oder auslösen.

base64.standard_b64encode(s)

Kodiert das bytes-ähnliche Objekt s unter Verwendung des Standard-Base64-Alphabets und gibt die kodierten bytes zurück.

base64.standard_b64decode(s)

Dekodiert das bytes-ähnliche Objekt oder den ASCII-String s unter Verwendung des Standard-Base64-Alphabets und gibt die dekodierten bytes zurück.

base64.urlsafe_b64encode(s)

Kodiert das bytes-ähnliche Objekt s unter Verwendung des URL- und dateisystem-sicheren Alphabets, das - anstelle von + und _ anstelle von / im Standard-Base64-Alphabet ersetzt, und gibt die kodierten bytes zurück. Das Ergebnis kann weiterhin = enthalten.

base64.urlsafe_b64decode(s)

Dekodiert das bytes-ähnliche Objekt oder den ASCII-String s unter Verwendung des URL- und dateisystem-sicheren Alphabets, das - anstelle von + und _ anstelle von / im Standard-Base64-Alphabet ersetzt, und gibt die dekodierten bytes zurück.

base64.b32encode(s)

Kodiert das bytes-ähnliche Objekt s mittels Base32 und gibt die kodierten bytes zurück.

base64.b32decode(s, casefold=False, map01=None)

Dekodiert das Base32-kodierte bytes-ähnliche Objekt oder den ASCII-String s und gibt die dekodierten bytes zurück.

Das optionale casefold ist ein Flag, das angibt, ob ein Kleinbuchstaben-Alphabet als Eingabe zulässig ist. Aus Sicherheitsgründen ist der Standardwert False.

RFC 4648 erlaubt die optionale Abbildung der Ziffer 0 (Null) auf den Buchstaben O (O) und der Ziffer 1 (Eins) auf entweder den Buchstaben I (I) oder L (L). Das optionale Argument map01, wenn nicht None, gibt an, auf welchen Buchstaben die Ziffer 1 abgebildet werden soll (wenn map01 nicht None ist, wird die Ziffer 0 immer auf den Buchstaben O abgebildet). Aus Sicherheitsgründen ist der Standardwert None, sodass 0 und 1 nicht in der Eingabe erlaubt sind.

Eine binascii.Error wird ausgelöst, wenn s falsch aufgefüllt ist oder wenn Nicht-Alphabet-Zeichen in der Eingabe vorhanden sind.

base64.b32hexencode(s)

Ähnlich wie b32encode(), verwendet jedoch das erweiterte Hex-Alphabet, wie in RFC 4648 definiert.

Hinzugefügt in Version 3.10.

base64.b32hexdecode(s, casefold=False)

Ähnlich wie b32decode(), verwendet jedoch das erweiterte Hex-Alphabet, wie in RFC 4648 definiert.

Diese Version erlaubt keine Zuordnung der Ziffer 0 (Null) zum Buchstaben O (O) und der Ziffer 1 (Eins) zu entweder I (I) oder L (L), da alle diese Zeichen im erweiterten Hex-Alphabet enthalten sind und nicht austauschbar sind.

Hinzugefügt in Version 3.10.

base64.b16encode(s)

Kodiert das bytes-ähnliche Objekt s mittels Base16 und gibt die kodierten bytes zurück.

base64.b16decode(s, casefold=False)

Dekodiert das Base16-kodierte bytes-ähnliche Objekt oder den ASCII-String s und gibt die dekodierten bytes zurück.

Das optionale casefold ist ein Flag, das angibt, ob ein Kleinbuchstaben-Alphabet als Eingabe zulässig ist. Aus Sicherheitsgründen ist der Standardwert False.

Eine binascii.Error wird ausgelöst, wenn s falsch aufgefüllt ist oder wenn Nicht-Alphabet-Zeichen in der Eingabe vorhanden sind.

Base85-Kodierungen

Die Base85-Kodierung ist nicht formal spezifiziert, sondern ein De-facto-Standard, daher führen verschiedene Systeme die Kodierung unterschiedlich durch.

Die Funktionen a85encode() und b85encode() in diesem Modul sind zwei Implementierungen des De-facto-Standards. Sie sollten die Funktion mit der Base85-Implementierung aufrufen, die von der Software verwendet wird, mit der Sie arbeiten möchten.

Die beiden in diesem Modul vorhandenen Funktionen unterscheiden sich in ihrer Behandlung der folgenden Punkte:

  • Ob einschließende Markierungen <~ und ~> enthalten sein sollen

  • Ob Zeilenumbrüche enthalten sein sollen

  • Die Menge der für die Kodierung verwendeten ASCII-Zeichen

  • Behandlung von Null-Bytes

Weitere Informationen finden Sie in der Dokumentation der einzelnen Funktionen.

base64.a85encode(b, *, foldspaces=False, wrapcol=0, pad=False, adobe=False)

Kodiert das bytes-ähnliche Objekt b mittels Ascii85 und gibt die kodierten bytes zurück.

foldspaces ist ein optionales Flag, das die spezielle Kurzsequenz 'y' anstelle von 4 aufeinanderfolgenden Leerzeichen (ASCII 0x20) verwendet, wie von 'btoa' unterstützt. Diese Funktion wird von der "Standard"-Ascii85-Kodierung nicht unterstützt.

wrapcol steuert, ob die Ausgabe Zeilenumbruchszeichen (b'\n') enthalten soll. Wenn dieser Wert ungleich Null ist, ist jede Ausgabeszeile maximal so lang wie dieser Wert in Zeichen, abzüglich des abschließenden Zeilenumbruchs.

pad steuert, ob die Eingabe vor der Kodierung auf ein Vielfaches von 4 aufgefüllt wird. Beachten Sie, dass die btoa-Implementierung immer auffüllt.

adobe steuert, ob die kodierte Byte-Sequenz mit <~ und ~> eingerahmt wird, was von der Adobe-Implementierung verwendet wird.

Hinzugefügt in Version 3.4.

base64.a85decode(b, *, foldspaces=False, adobe=False, ignorechars=b' \t\n\r\x0b')

Dekodiert das Ascii85-kodierte bytes-ähnliche Objekt oder den ASCII-String b und gibt die dekodierten bytes zurück.

foldspaces ist ein Flag, das angibt, ob die kurze Sequenz 'y' als Kurzform für 4 aufeinanderfolgende Leerzeichen (ASCII 0x20) akzeptiert werden soll. Diese Funktion wird von der "Standard"-Ascii85-Kodierung nicht unterstützt.

adobe steuert, ob die Eingabesequenz im Adobe-Ascii85-Format vorliegt (d. h. mit <~ und ~> eingerahmt ist).

ignorechars sollte ein bytes-ähnliches Objekt oder ein ASCII-String sein, der Zeichen enthält, die aus der Eingabe ignoriert werden sollen. Dies sollte nur Leerzeichen enthalten, und standardmäßig werden alle Leerzeichen in ASCII ignoriert.

Hinzugefügt in Version 3.4.

base64.b85encode(b, pad=False)

Kodiert das bytes-ähnliche Objekt b mittels Base85 (wie z. B. in Git-Style-Binär-Diffs verwendet) und gibt die kodierten bytes zurück.

Wenn pad True ist, wird die Eingabe mit b'\0' aufgefüllt, sodass ihre Länge ein Vielfaches von 4 Bytes beträgt, bevor sie kodiert wird.

Hinzugefügt in Version 3.4.

base64.b85decode(b)

Dekodiert das Base85-kodierte bytes-ähnliche Objekt oder den ASCII-String b und gibt die dekodierten bytes zurück. Padding wird, falls notwendig, implizit entfernt.

Hinzugefügt in Version 3.4.

base64.z85encode(s)

Kodiert das bytes-ähnliche Objekt s mittels Z85 (wie in ZeroMQ verwendet) und gibt die kodierten bytes zurück. Weitere Informationen finden Sie in der Z85-Spezifikation.

Hinzugefügt in Version 3.13.

base64.z85decode(s)

Dekodiert das Z85-kodierte bytes-ähnliche Objekt oder den ASCII-String s und gibt die dekodierten bytes zurück. Weitere Informationen finden Sie in der Z85-Spezifikation.

Hinzugefügt in Version 3.13.

Legacy-Schnittstelle

base64.decode(input, output)

Dekodiert den Inhalt der binären input-Datei und schreibt die resultierenden Binärdaten in die output-Datei. input und output müssen Datei-Objekte sein. input wird gelesen, bis input.readline() ein leeres Bytes-Objekt zurückgibt.

base64.decodebytes(s)

Dekodiert das bytes-ähnliche Objekt s, das eine oder mehrere Zeilen mit Base64-kodierten Daten enthalten muss, und gibt die dekodierten bytes zurück.

Hinzugefügt in Version 3.1.

base64.encode(input, output)

Kodiert den Inhalt der binären input-Datei und schreibt die resultierenden Base64-kodierten Daten in die output-Datei. input und output müssen Datei-Objekte sein. input wird gelesen, bis input.read() ein leeres Bytes-Objekt zurückgibt. encode() fügt nach jeweils 76 Ausgabebyte ein Zeilenumbruchszeichen (b'\n') ein und stellt sicher, dass die Ausgabe immer mit einem Zeilenumbruch endet, gemäß RFC 2045 (MIME).

base64.encodebytes(s)

Kodiert das bytes-ähnliche Objekt s, das beliebige Binärdaten enthalten kann, und gibt bytes mit den Base64-kodierten Daten zurück, wobei Zeilenumbrüche (b'\n') nach jeweils 76 Ausgabebyte eingefügt werden und sichergestellt wird, dass ein abschließender Zeilenumbruch vorhanden ist, gemäß RFC 2045 (MIME).

Hinzugefügt in Version 3.1.

Ein Anwendungsbeispiel für das Modul

>>> import base64
>>> encoded = base64.b64encode(b'data to be encoded')
>>> encoded
b'ZGF0YSB0byBiZSBlbmNvZGVk'
>>> data = base64.b64decode(encoded)
>>> data
b'data to be encoded'

Sicherheitsaspekte

Ein neuer Abschnitt zu Sicherheitsaspekten wurde zu RFC 4648 (Abschnitt 12) hinzugefügt; es wird empfohlen, den Sicherheitsabschnitt für alle in der Produktion eingesetzten Codes zu überprüfen.

Siehe auch

Modul binascii

Unterstützungsmodul, das Konvertierungen von ASCII zu Binärdaten und von Binärdaten zu ASCII enthält.

RFC 1521 — MIME (Multipurpose Internet Mail Extensions) Teil Eins: Mechanismen zur Angabe und Beschreibung des Formats von Internet-Nachrichtenkörpern

Abschnitt 5.2 „Base64 Content-Transfer-Encoding“ definiert die Base64-Kodierung.