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.

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

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 контролює, чи слід додавати до виводу символи нового рядка (b'\n'). Якщо значення відмінне від нуля, кожен вихідний рядок матиме щонайбільше стільки символів.

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