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

Вихідний код: 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.

Цей модуль має два інтерфейси. Сучасний інтерфейс підтримує кодування bytes-подібних об’єктів в ASCII `bytes` і декодування bytes-подібних об’єктів або рядків, що містять ASCII в `bytes`. Підтримуються обидва алфавіти base-64, визначені в RFC 4648 (звичайний і безпечний для URL-адрес і файлової системи).

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.

Змінено в версії 3.3: Тепер функції декодування сучасного інтерфейсу приймають рядки Unicode лише для ASCII.

Змінено в версії 3.4: Будь-які байтоподібні об’єкти тепер приймаються всіма функціями кодування та декодування в цьому модулі. Додано підтримку Ascii85/Base85.

## 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)

  Закодуйте bytes-like object s за допомогою Base64 і поверніть закодовані `bytes`.

  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.

  Змінено в версії 3.15: Added the wrapcol parameter.

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

  Декодуйте закодований Base64 bytes-like object або рядок ASCII s і повертайте розкодований `bytes`.

  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.

  Виняток `binascii.Error` викликається, якщо s неправильно доповнено.

  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()`

  Змінено в версії 3.15.0a5 (unreleased): Added the ignorechars parameter.

  Застаріло починаючи з версії 3.15.0a5 (unreleased): Accepting the `+` and `/` characters with an alternative alphabet is now deprecated.

base64.standard_b64encode(s)

  Кодуйте bytes-like object s за допомогою стандартного алфавіту Base64 і повертайте закодовані `bytes`.

base64.standard_b64decode(s)

  Декодуйте bytes-like object або рядок ASCII s за допомогою стандартного алфавіту Base64 і повертайте декодований `bytes`.

base64.urlsafe_b64encode(s)

  Кодуйте bytes-like object s за допомогою алфавіту, безпечного для URL-адреси та файлової системи, який замінює `-` замість `+` і `_` замість `/` у стандартному алфавіті Base64 і повертає закодовані `bytes`. Результат все ще може містити `=`.

base64.urlsafe_b64decode(s)

  Декодуйте bytes-like object або рядок ASCII s за допомогою алфавіту, безпечного для URL-адреси та файлової системи, який замінює `-` замість `+` і `_` замість `/` у стандартному алфавіті Base64 і повертає декодовані `bytes`.

  Застаріло починаючи з версії 3.15.0a5 (unreleased): Accepting the `+` and `/` characters is now deprecated.

base64.b32encode(s)

  Закодуйте bytes-like object s за допомогою Base32 і поверніть закодовані `bytes`.

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

  Декодуйте закодований Base32 bytes-like object або рядок ASCII s і повертайте розкодований `bytes`.

  Необов’язковий casefold — це позначка, яка вказує, чи прийнятний алфавіт у нижньому регістрі як вхідні дані. З міркувань безпеки за умовчанням встановлено значення `False`.

  RFC 4648 дозволяє додаткове відображення цифри 0 (нуль) на літеру O (oh), а також додаткове відображення цифри 1 (один) у літеру I (око) або літеру L (el) . Необов’язковий аргумент map01, якщо він не «None», визначає, на яку букву має бути зіставлено цифру 1 (якщо map01 не є «None», цифра 0 завжди зіставляється з літерою O). З міркувань безпеки типовим значенням є `None`, тому 0 і 1 не допускаються у вхідних даних.

  Помилка `binascii.Error` виникає, якщо s неправильно доповнено або якщо у вхідних даних присутні символи не алфавіту.

base64.b32hexencode(s)

  Подібно до `b32encode()`, але використовує розширений шістнадцятковий алфавіт, як визначено в RFC 4648.

  Added in version 3.10.

base64.b32hexdecode(s, casefold=False)

  Подібно до `b32decode()`, але використовує розширений шістнадцятковий алфавіт, як визначено в RFC 4648.

  У цій версії не допускається зіставлення цифри 0 (нуль) з літерою O (oh) і цифри 1 (один) з літерою I (око) або літерою L (el). Усі ці символи входять до розширеного шістнадцяткового алфавіту. і не є взаємозамінними.

  Added in version 3.10.

base64.b16encode(s)

  Закодуйте bytes-like object s за допомогою Base16 і поверніть закодовані `bytes`.

base64.b16decode(s, casefold=False)

  Декодуйте закодований Base16 bytes-like object або рядок ASCII s і повертайте розкодований `bytes`.

  Необов’язковий casefold — це позначка, яка вказує, чи прийнятний алфавіт у нижньому регістрі як вхідні дані. З міркувань безпеки за умовчанням встановлено значення `False`.

  Помилка `binascii.Error` виникає, якщо s неправильно доповнено або якщо у вхідних даних присутні символи не алфавіту.

## 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)

  Закодуйте bytes-like object b за допомогою Ascii85 та поверніть закодовані `bytes`.

  foldspaces — це необов’язковий прапорець, який використовує спеціальну коротку послідовність «y» замість 4 послідовних пробілів (ASCII 0x20), як це підтримується «btoa». Ця функція не підтримується «стандартним» кодуванням 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.

  If pad is true, the input is padded with `b'\0'` so its length is a multiple of 4 bytes before encoding. Note that the `btoa` implementation always pads.

  adobe контролює, чи буде закодована послідовність байтів обрамлена `<~` and `~>`, яка використовується реалізацією Adobe.

  Added in version 3.4.

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

  Декодуйте закодований Ascii85 bytes-like object або рядок ASCII b та повертайте декодований `bytes`.

  foldspaces — це позначка, яка вказує, чи слід приймати коротку послідовність „y“ як скорочення для 4 послідовних пробілів (ASCII 0x20). Ця функція не підтримується «стандартним» кодуванням Ascii85.

  adobe контролює, чи буде вхідна послідовність у форматі Adobe Ascii85 (тобто в рамці <~ and ~>).

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

  Added in version 3.4.

base64.b85encode(b, pad=False)

  Закодуйте bytes-like object b за допомогою base85 (як використовується, наприклад, у бінарних відмінностях у стилі git) і поверніть закодований `bytes`.

  Якщо pad має значення true, вхід доповнюється `b'\0`, тому його довжина є кратною 4 байтам перед кодуванням.

  Added in version 3.4.

base64.b85decode(b)

  Декодуйте закодований base85 bytes-like object або рядок ASCII b та повертайте декодований `bytes`. Відступи неявно видаляються, якщо необхідно.

  Added in 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.

  Якщо pad має значення true, вхід доповнюється `b'\0`, тому його довжина є кратною 4 байтам перед кодуванням.

  Added in version 3.13.

  Змінено в версії 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.

  Added in version 3.13.

## Legacy Interface

base64.decode(input, output)

  Декодуйте вміст двійкового вхідного файлу та запишіть отримані двійкові дані у вихідний файл. вхід і вихід мають бути файловими об’єктами. input читатиметься, доки `input.readline()` не поверне порожній об’єкт bytes.

base64.decodebytes(s)

  Декодуйте bytes-like object s, який має містити один або кілька рядків даних у кодуванні base64, і повертайте розкодовані `bytes`.

  Added in version 3.1.

base64.encode(input, output)

  Закодуйте вміст двійкового вхідного файлу та запишіть отримані дані в кодуванні base64 у вихідний файл. вхід і вихід мають бути файловими об’єктами. input читатиметься, доки `input.read()` не поверне порожній об’єкт bytes. `encode()` вставляє символ нового рядка (`b'\n'`) після кожних 76 байтів виводу, а також гарантує, що вивід завжди закінчується символом нового рядка, відповідно до RFC 2045 (MIME).

base64.encodebytes(s)

  Закодуйте bytes-like object s, який може містити довільні двійкові дані, і поверніть `bytes`, що містить дані в кодуванні base64, із символами нового рядка (`b'\n'`) вставляється після кожних 76 байтів виводу та забезпечує наявність кінцевого нового рядка відповідно до RFC 2045 (MIME).

  Added in version 3.1.

Приклад використання модуля:

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

## Міркування безпеки

Новий розділ міркувань безпеки додано до RFC 4648 (розділ 12); рекомендуємо переглянути розділ безпеки для будь-якого коду, розгорнутого в робочій версії.

Дивись також

Модуль `binascii`

  Модуль підтримки, що містить перетворення ASCII у двійковий і двійковий у ASCII.

RFC 1521 - MIME (багатоцільові розширення інтернет-пошти), частина перша: механізми визначення й опису формату тіл інтернет-повідомлень

  Розділ 5.2 «Кодування передачі вмісту Base64» містить визначення кодування base64.