base64 — Base16, Base32, Base64, Base85 кодировки данных

Исходный код: Lib/base64.py


Модуль предоставляет функции для кодирования двоичных данных в печатные ASCII символы и декодирование обратно закодированные двоичные данные. Он предоставляет функции кодирования и декодирования представленные в RFC 3548, который определяет алгоритмы Base16, Base32 и base64 и де-факто стандарты Ascii85 и Base85 кодировок.

В RFC 3548 кодировки подходит для кодирования двоичных данных, так что его можно смело отправлять по электронной почте, используемой в качестве части URL- адреса или включения в состав HTTP-запроса POST. Алгоритм кодирования не совпадает с программой uuencode.

Существует два интерфейса, представленные в этом модуле. Современный интерфейс поддерживает кодирование байтоподобных объектов в bytes и декодирование байтоподобных объектов или строк содержащих ASCII в bytes. Поддерживаются оба base-64 алфавита определеные в RFC 3548 (обычные, URL и безопасные для файловой системы) .

Старый интерфейс не поддерживает декодирование из строки, но он обеспечивает функции для кодирования и декодирования файловых объектов. Он поддерживает только стандартный алфавит base64 и это добавляет новую строку каждые 76 символов как в RFC 2045. Обратите внимание, что если вам нужна поддержка RFC 2045, наверное, вам стоит взглянуть на пакет email.

Изменено в версии 3.3: Только ASCII Юникод строки принимаются функцией декодирования современного интерфейса.

Изменено в версии 3.4: Любые байтоподобные объекты сейчас принимаются функциями для кодирования и декодирования в этом модуле. Добавлена проддержка Ascii85/Base85.

Современный интерфейс обеспечивает:

base64.b64encode(s, altchars=None)

Кодирование в байтоподобный объект s используя base64 и возвращает его в закодированных bytes.

Опционально altchars должн быть байтоподобным объеком длиной по крайней мере 2 (лишние символы игнорируются), который указывает альтернативный алфавит для + и / символов. Это позволяет приложению генерировать URL-адреса или безопасные для файловой системы base64 строки. По умолчанию None, для используемого стандартного алфавита base64.

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

Декодировать Base64 закодированный байтоподобный объект или строку ASCII s и вернуть декодированные bytes.

Опционально altchars должны быть байтоподобным объектом или ASCII строка длиной по крайней мере 2 (лишние символы игнорируются), который определяет альтернативный алфавит используемый вместо + и / символов.

Вызвается исключение binascii.Error, если s неправильно набита.

Если validate является False (по умолчанию), символы, которые ни в обычном base-64 алфавите, ни альтернативного алфавита, не учитываются до проверки заполнения. Если validate является True не-алфавитные символовы в входном результате вызовут исключение binascii.Error.

base64.standard_b64encode(s)

Кодировать байтоподобный объект s с помощью стандартного алфавита Base64 и возвратить закодированные bytes.

base64.standard_b64decode(s)

Декодировать байтоподобный объект или ASCII строку s используя стандартный Base64 алфавит и возвращая декодированный bytes.

base64.urlsafe_b64encode(s)

Кодировать байтоподобный объект s, используя URL-адрес - и безопасным для файловой системы алфавитом, который заменяет - вместо + и _ вместо / в стандартном алфавите base64, и возвращает в закодированные bytes. Результат все может содержать =.

base64.urlsafe_b64decode(s)

Декодирование байтоподобного объекта или ASCII строку s, используя URL и безопасный для файловой системы алфавит, который заменяет - вместо + и _ вместо / в стандартном алфавите Base64 и возвращает в декодированные bytes.

base64.b32encode(s)

Кодировать в байтоподобный объект s используя Base32 и возвращает в закодированные bytes.

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

Декодировать Base32 закодированный байтоподобный объект или ASCII строку s и возвращая декодированные bytes.

Опциональный casefold флаг, указывающий, является ли строчные алфавит приемлемым в качестве входных данных. В целях безопасности, по умолчанию False.

RFC 3548 позволяет опционально отображать цифры 0 (ноль) с буквой O (О) и для дополнительного отображения цифру 1 (один) буквы I (eye) или буква Д (el). Опциональный map01 аргумент, когда не None, указывает, что буква цифры 1 должно быть сопоставлена (когда map01 не None, цифра 0 всегда отображается буквой O). В целях безопасности по умолчанию None, так что 0 и 1 не разрешены на входе.

Вызвается binascii.Error, если s неправильно набита или если есть не-алфавитных символов во входных данных.

base64.b16encode(s)

Кодировать в байтоподобный объект s используя Base16 и возвращая в закодированные bytes.

base64.b16decode(s, casefold=False)

Декодировать Base16 закодированный байтоподобный объект или ASCII строку s и возвращая декодированные bytes.

Опциональный параметр casefold - это флаг, указывающий, является ли строчный алфавит приемлемым в качестве входных данных. В целях безопасности, по умолчанию False.

Вызывается binascii.Error, если s неправильно набита или если есть не-алфавитных символов во входных данных.

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

Кодировать байтоподобный объект b используя Ascii85 и вернуть закодированные bytes.

foldspaces - необязательный флаг, который использует специальную последовательность „г“, а не 4 пробела подряд (в формате ASCII в диапазоне от 0x20) как „btoa“. Эта функция не поддерживается «стандартное» кодирование Ascii85.

wrapcol определяет, будет ли на выходе перевод строки (b'\n') символов, добавленных к нему. Если это не ноль, каждая выходная строка будет на это самое множество символов.

pad контролирует ли вход кратна 4 перед кодированием. Отметим, что реализация btoa всегда набивается.

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

Добавлено в версии 3.4.

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

Декодировать Ascii85 закодированный байтоподобный объект или ASCII строку b и возвращая декодированные bytes.

foldspaces - флаг, который указывает, является ли „y“ короткой последовательностью принятой в качестве условного обохначения для 4 последовательных пробелов (ASCII 0x20). Эта функция не поддерживает «стандартное» кодирование Ascii85.

adobe определяет последовательность ввода в формате Adobe Ascii85 (т. е. оформлена с <~ и ~>).

ignorechars должны быть байтоподобным объектом или ASCII строкой, содержащие символы игнорирования входного. Он должн содержать только пробельные символы, и по умолчанию содержит все пробельные символы в ASCII.

Добавлено в версии 3.4.

base64.b85encode(b, pad=False)

Кодировать в байтоподобный объект b используя base85 (как используемый, например, git-стиль бинарных диффов) и возвращает в закодированные bytes.

Если pad True, входной заполняется b'\0', поэтому его длина кратна 4 байтам перед кодированием.

Добавлено в версии 3.4.

base64.b85decode(b)

Декодирование в base85-закодированный байтоподобный объект или ASCII строку b и возвращает в декодированные bytes. Обивка неявно удалены, если это необходимо.

Добавлено в версии 3.4.

Устаревший интерфейс:

base64.decode(input, output)

Декодирование содержимого двоичного файла input и записать получившиеся двоичные данные в файл output. input и output должны быть файловыми объектами. input будут читать, пока объект input.readline() не вернёт пустой байт.

base64.decodebytes(s)

Декодирование в байтоподобный объект s, который должен содержать одну или несколько строк в base64 закодированные данных, и возвращает декодированные bytes.

Добавлено в версии 3.1.

base64.decodestring(s)

Устаревшие алиас decodebytes().

Не рекомендуется, начиная с версии 3.1.

base64.encode(input, output)

Кодировать содержимое двоичного файла input и записать полученные в base64 закодированные данные в файл output. input и output должны быть файловыми объектами. input будут читаться, пока объект input.read() не вернёт пустой байт. func:encode вставляет символ новой строки (b'\n') через каждые 76 байт выходных данных, а также сделать вывод всегда завершается символом новой строки, как в RFC 2045 (MIME).

base64.encodebytes(s)

Кодировать в байтоподобный объект s, который может содержать произвольные двоичные данные, и возвращает bytes содаржащие base64 кодированные данные, с символом новой строки (b'\n') вставляется после каждых 76 байт вывода и обеспечивает что есть завершающий символ новой строки, как в RFC 2045 (MIME).

Добавлено в версии 3.1.

base64.encodestring(s)

Устаревшие алиас encodebytes().

Не рекомендуется, начиная с версии 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'

См.также

Модуль binascii
Модуль поддержки преобразования ASCII-в-двоичный и двоичный-в-ASCII.
RFC 1521 - MIME (Многоцелевые расширения почтового стандарта Internet) часть первая: механизмы для определения и описания формата тел интернет-сообщений
Раздел 5.2 «содержание-передача-кодирование base64», дает определение кодировки base64.