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

  Закодуйте 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.

  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.

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

  Декодуйте закодований 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 неправильно доповнено.

  Якщо validate має значення `False` (за замовчуванням), символи, які не належать ні до звичайного алфавіту base-64, ні до альтернативного алфавіту, відкидаються перед перевіркою заповнення. Якщо validate має значення `True`, ці неалфавітні символи у вхідних даних призводять до `binascii.Error`.

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

  May assert or raise a `ValueError` if the length of altchars is not 2.

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`.

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.

  wrapcol controls whether the output should have newline (`b'\n'`) characters added to it. If this is non-zero, each output line will be at most this many characters long, excluding the trailing newline.

  pad контролює, чи додається вхід до числа, кратного 4, перед кодуванням. Зауважте, що реалізація `btoa` завжди доповнює.

  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 має бути bytes-like object або рядком ASCII, що містить символи, які слід ігнорувати у введених даних. Він має містити лише пробільні символи та за замовчуванням містить усі пробільні символи в 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)

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

  Added in version 3.13.

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.