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

Вихідний код: Lib/base64.py

Цей модуль надає функції для кодування двійкових даних у друковані символи ASCII і декодування таких кодувань назад у двійкові дані. Він надає функції кодування та декодування для кодувань, указаних у RFC 4648, який визначає алгоритми Base16, Base32 і Base64, а також для стандартних кодувань Ascii85 і Base85.

Кодування RFC 4648 підходить для кодування двійкових даних, щоб їх можна було безпечно надсилати електронною поштою, використовувати як частини URL-адрес або додавати як частину запиту HTTP POST. Алгоритм кодування не такий самий, як програма uuencode.

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

Застарілий інтерфейс не підтримує декодування з рядків, але він надає функції для кодування та декодування до та з файлових об’єктів. Він підтримує лише стандартний алфавіт Base64 і додає нові рядки кожні 76 символів відповідно до RFC 2045. Зауважте, що якщо ви шукаєте підтримку RFC 2045, ви, ймовірно, захочете подивитися на пакет `email`.

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

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

Сучасний інтерфейс забезпечує:

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.

  Нове в версії 3.10.

base64.b32hexdecode(s, casefold=False)

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

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

  Нове в версії 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 неправильно доповнено або якщо у вхідних даних присутні символи не алфавіту.

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.

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

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

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

  Нове в версії 3.4.

base64.b85encode(b, pad=False)

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

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

  Нове в версії 3.4.

base64.b85decode(b)

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

  Нове в версії 3.4.

Застарілий інтерфейс:

base64.decode(input, output)

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

base64.decodebytes(s)

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

  Нове в версії 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).

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