# `base64` --- Base16, Base32, Base64, Base85 Data Encodings

Code source : Lib/base64.py

This module provides functions for encoding binary data to printable ASCII characters and decoding such encodings back to binary data. This includes the encodings specified in RFC 4648 (Base64, Base32 and Base16) and the non-standard Base85 encodings.

There are two interfaces provided by this module. The modern interface supports encoding bytes-like objects to ASCII `bytes`, and decoding bytes-like objects or strings containing ASCII to `bytes`. Both base-64 alphabets defined in RFC 4648 (normal, and URL- and filesystem-safe) are supported.

The legacy interface does not support decoding from strings, but it does provide functions for encoding and decoding to and from file objects. It only supports the Base64 standard alphabet, and it adds newlines every 76 characters as per RFC 2045. Note that if you are looking for RFC 2045 support you probably want to be looking at the `email` package instead.

Modifié dans la version 3.3: Les chaînes de caractères Unicode contenant uniquement des caractères ASCII sont désormais acceptées par les fonctions de décodage de l'interface moderne.

Modifié dans la version 3.4: Tous les objets octet-compatibles sont désormais acceptés par l'ensemble des fonctions d'encodage et de décodage de ce module. La gestion de Ascii85/base85 a été ajoutée.

## RFC 4648 Encodings

The RFC 4648 encodings are suitable for encoding binary data so that it can be safely sent by email, used as parts of URLs, or included as part of an HTTP POST request.

base64.b64encode(s, altchars=None, *, wrapcol=0)

  Encode un objet octet-compatible s en utilisant l'algorithme base64 et renvoie les `bytes` encodés.

  Optional altchars must be a bytes-like object of length 2 which specifies an alternative alphabet for the `+` and `/` characters. This allows an application to e.g. generate URL or filesystem safe Base64 strings. The default is `None`, for which the standard Base64 alphabet is used.

  If wrapcol is non-zero, insert a newline (`b'\n'`) character after at most every wrapcol characters. If wrapcol is zero (default), do not insert any newlines.

  May assert or raise a `ValueError` if the length of altchars is not 2. Raises a `TypeError` if altchars is not a bytes-like object.

  Modifié dans la version 3.15: Added the wrapcol parameter.

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

  Décode un objet octet-compatible ou une chaîne de caractères ASCII s encodée en base64 et renvoie les `bytes` décodés.

  Optional altchars must be a bytes-like object or ASCII string of length 2 which specifies the alternative alphabet used instead of the `+` and `/` characters.

  Une exception `binascii.Error` est levée si s n'est pas remplie à une longueur attendue.

  If ignorechars is specified, it should be a bytes-like object containing characters to ignore from the input when validate is true. If ignorechars contains the pad character `'='`, the pad characters presented before the end of the encoded data and the excess pad characters will be ignored. The default value of validate is `True` if ignorechars is specified, `False` otherwise.

  If validate is false, characters that are neither in the normal base-64 alphabet nor (if ignorechars is not specified) the alternative alphabet are discarded prior to the padding check, but the `+` and `/` characters keep their meaning if they are not in altchars (they will be discarded in future Python versions).

  If validate is true, these non-alphabet characters in the input result in a `binascii.Error`.

  For more information about the strict base64 check, see `binascii.a2b_base64()`

  Modifié dans la version 3.15.0a5 (unreleased): Added the ignorechars parameter.

  Obsolète depuis la version 3.15.0a5 (unreleased): Accepting the `+` and `/` characters with an alternative alphabet is now deprecated.

base64.standard_b64encode(s)

  Encode un objet octet-compatible s en utilisant l'alphabet standard base64 et renvoie les `bytes` encodés.

base64.standard_b64decode(s)

  Décode un objet octet-compatible ou une chaîne de caractères ASCII s utilisant l'alphabet base64 standard et renvoie les `bytes` décodés.

base64.urlsafe_b64encode(s)

  Encode un objet byte-compatible s en utilisant un alphabet sûr pour les URL et systèmes de fichiers qui substitue `-` et `_` à `+` et `/` dans l'alphabet standard base64 et renvoie les `bytes` encodés.

base64.urlsafe_b64decode(s)

  Décode un objet octet-compatible ou une chaîne de caractères ASCII s utilisant un alphabet sûr pour les URL et systèmes de fichiers qui substitue `-` et `_` à `+` et `/` dans l'alphabet standard base64 et renvoie les `bytes` décodés.

  Obsolète depuis la version 3.15.0a5 (unreleased): Accepting the `+` and `/` characters is now deprecated.

base64.b32encode(s)

  Encode un objet byte-compatible s en utilisant l'algorithme base32 et renvoie les `bytes` encodés.

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

  Décode un objet octet-compatible ou une chaîne de caractères ASCII s encodé en base32 et renvoie les `bytes` décodés.

  L'option casefold est un drapeau spécifiant si l'utilisation d'un alphabet en minuscules est acceptable comme entrée. Pour des raisons de sécurité, cette option est à `False` par défaut.

  RFC 4648 allows for optional mapping of the digit 0 (zero) to the letter O (oh), and for optional mapping of the digit 1 (one) to either the letter I (eye) or letter L (el). The optional argument map01 when not `None`, specifies which letter the digit 1 should be mapped to (when map01 is not `None`, the digit 0 is always mapped to the letter O). For security purposes the default is `None`, so that 0 and 1 are not allowed in the input.

  Une exception `binascii.Error` est levée si s n'est pas remplie à une longueur attendue ou si elle contient des caractères hors de l'alphabet.

base64.b32hexencode(s)

  Similar to `b32encode()` but uses the Extended Hex Alphabet, as defined in RFC 4648.

  Ajouté dans la version 3.10.

base64.b32hexdecode(s, casefold=False)

  Similar to `b32decode()` but uses the Extended Hex Alphabet, as defined in RFC 4648.

  This version does not allow the digit 0 (zero) to the letter O (oh) and digit 1 (one) to either the letter I (eye) or letter L (el) mappings, all these characters are included in the Extended Hex Alphabet and are not interchangeable.

  Ajouté dans la version 3.10.

base64.b16encode(s)

  Encode un objet byte-compatible s en utilisant l'algorithme base16 et renvoie les `bytes` encodés.

base64.b16decode(s, casefold=False)

  Décode un objet octet-compatible ou une chaîne de caractères ASCII s encodé en base16 et renvoie les `bytes` décodés.

  L'option casefold est un drapeau spécifiant si l'utilisation d'un alphabet en minuscules est acceptable comme entrée. Pour des raisons de sécurité, cette option est à `False` par défaut.

  Une exception `binascii.Error` est levée si s n'est pas remplie à une longueur attendue ou si elle contient des caractères hors de l'alphabet.

## Base85 Encodings

Base85 encoding is not formally specified but rather a de facto standard, thus different systems perform the encoding differently.

The `a85encode()` and `b85encode()` functions in this module are two implementations of the de facto standard. You should call the function with the Base85 implementation used by the software you intend to work with.

The two functions present in this module differ in how they handle the following:

- Whether to include enclosing `<~` and `~>` markers

- Whether to include newline characters

- The set of ASCII characters used for encoding

- Handling of null bytes

Refer to the documentation of the individual functions for more information.

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

  Encode un objet byte-compatible s en utilisant l'algorithme Ascii85 et renvoie les `bytes` encodés.

  L'option foldspaces permet d'utiliser la séquence spéciale 'y' à la place de quatre espaces consécutives (ASCII `0x20`) comme pris en charge par btoa. Cette fonctionnalité n'est pas gérée par l'encodage « standard » Ascii85.

  If wrapcol is non-zero, insert a newline (`b'\n'`) character after at most every wrapcol characters. If wrapcol is zero (default), do not insert any newlines.

  pad spécifie l'ajout de caractères de remplissage (padding en anglais) à l'entrée jusqu'à ce que sa longueur soit un multiple de 4 avant encodage. Notez que l'implémentation `btoa` effectue systématiquement ce remplissage.

  adobe contrôle si oui ou non la séquence encodée d'octets est encadrée par `<~` et `~>` comme utilisé dans l'implémentation Adobe.

  Ajouté dans la version 3.4.

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

  Décode un objet octet-compatible ou une chaîne de caractères ASCII s encodé en Ascii85 et renvoie les `bytes` décodés.

  L'option foldspaces permet d'utiliser la séquence spéciale 'y' à la place de quatre espaces consécutives (ASCII `0x20`) comme pris en charge par btoa. Cette fonctionnalité n'est pas gérée par l'encodage « standard » Ascii85.

  adobe indique si la séquence d'entrée utilise le format Adobe Ascii85 (c'est-à-dire utilise l'encadrement par `<~` et `~>`).

  ignorechars should be a byte string containing characters to ignore from the input. This should only contain whitespace characters, and by default contains all whitespace characters in ASCII.

  Ajouté dans la version 3.4.

base64.b85encode(b, pad=False)

  Encode un objet byte-compatible s en utilisant l'algorithme base85 (tel qu'utilisé par exemple par le programme git-diff sur des données binaires) et renvoie les `bytes` encodés.

  Si pad est vrai, des caractères de remplissage `b'\0'` (padding en anglais) sont ajoutés à l'entrée jusqu'à ce que sa longueur soit un multiple de 4 octets avant encodage.

  Ajouté dans la version 3.4.

base64.b85decode(b)

  Décode un objet octet-compatible ou une chaîne de caractères ASCII b encodé en base85 et renvoie les `bytes` décodés. Les caractères de remplissage sont implicitement retirés si nécessaire.

  Ajouté dans la version 3.4.

base64.z85encode(s, pad=False)

  Encode the bytes-like object s using Z85 (as used in ZeroMQ) and return the encoded `bytes`. See Z85 specification for more information.

  Si pad est vrai, des caractères de remplissage `b'\0'` (padding en anglais) sont ajoutés à l'entrée jusqu'à ce que sa longueur soit un multiple de 4 octets avant encodage.

  Ajouté dans la version 3.13.

  Modifié dans la version 3.15: The pad parameter was added.

base64.z85decode(s)

  Decode the Z85-encoded bytes-like object or ASCII string s and return the decoded `bytes`. See Z85 specification for more information.

  Ajouté dans la version 3.13.

## Legacy Interface

base64.decode(input, output)

  Décode le contenu d'un fichier binaire input et écrit les données binaires résultantes dans le fichier output. input et output doivent être des objets fichiers. input est lu jusqu'à ce que `input.readline()` renvoie un objet bytes vide.

base64.decodebytes(s)

  Décode un objet octet-compatible s devant contenir une ou plusieurs lignes de données encodées en base64 et renvoie les `bytes` décodés.

  Ajouté dans la version 3.1.

base64.encode(input, output)

  Encode le contenu du fichier binaire input et écrit les données encodées en base64 résultantes dans le fichier output. *input et output doivent être des objets fichiers. input est lu jusqu'à ce que `input.readline()` renvoie un objet bytes vide. `encode()` insère un caractère de saut de ligne (`b'\n'`) tous les 76 octets de sortie et assure que celle-ci se termine par une nouvelle ligne, comme spécifié par la RFC 2045 (MIME).

base64.encodebytes(s)

  Encode un objet octet-compatible s pouvant contenir des données binaires arbitraires et renvoie les `bytes` contenant les données encodées en base64. Un caractère de saut de ligne (`b'\n'`) est inséré tous les 76 octets de sortie et celle-ci se termine par une nouvelle ligne, comme spécifié par la RFC 2045 (MIME).

  Ajouté dans la version 3.1.

Un exemple d'utilisation du module :

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

## Considérations de sécurité

A new security considerations section was added to RFC 4648 (section 12); it's recommended to review the security section for any code deployed to production.

Voir aussi

Module `binascii`

  Module secondaire contenant les conversions ASCII vers binaire et binaire vers ASCII.

RFC 1521 — MIME (Multipurpose Internet Mail Extensions) Part One: Mechanisms for Specifying and Describing the Format of Internet Message Bodies

  La Section 5.2, "Base64 Content-Transfer-Encoding", donne la définition de l'encodage base64.