Содержание страницы
base64 – кодирование данных Base16, Base32, Base64, Base85¶base64 – Base16, Base32, Base64, Base85 Data Encodings
Исходный код: Lib/base64.py
Этот модуль предоставляет функции для кодирования двоичных данных в печатные символы ASCII и декодирования таких кодировок обратно в двоичные данные. Он предоставляет функции кодирования и декодирования для кодировок, определённых в RFC 4648, которая определяет алгоритмы Base16, Base32 и Base64, а также для фактических стандартов Ascii85 и Base85.
Кодировки RFC 4648 подходят для кодирования двоичных данных, чтобы их можно было безопасно отправлять по электронной почте, использовать как части URL или включать в HTTP POST-запросы. Алгоритм кодирования не совпадает с программой uuencode.
Этот модуль предоставляет два интерфейса. Современный интерфейс поддерживает кодирование байтоподобных объектов в ASCII 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)¶
Кодирует байтоподобный объект s с помощью Base64 и возвращает закодированный
bytes.Необязательный altchars должен быть байтоподобным объектом длины 2, который задаёт альтернативный алфавит для символов
+и/. Это позволяет приложению, например, генерировать строки Base64, безопасные для URL или файловых систем. По умолчанию используетсяNone, для которого применяется стандартный алфавит Base64.Может вызвать утверждение (assert) или возбудить
ValueError, если длина altchars не равна 2. ВозбуждаетTypeError, если altchars не является байтоподобным объектом.
- 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 см. в
binascii.a2b_base64()Может вызвать утверждение или возбудить
ValueError, если длина altchars не равна 2.
- 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 4648 допускает необязательное отображение цифры 0 (ноль) на букву O (о) и необязательное отображение цифры 1 (один) на букву I (ай) или L (эль). Необязательный аргумент 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 (о) и цифры 1 (один) на букву I (ай) или L (эль); все эти символы входят в расширенный шестнадцатеричный алфавит и не являются взаимозаменяемыми.
Новое в версии 3.10.
- 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 – необязательный флаг, который использует специальную короткую последовательность 'y' вместо 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\x0b')¶
Декодирует 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 (используется, например, в двоичных diff-файлах в стиле git) и возвращает закодированный
bytes.Если pad истинно, входные данные дополняются
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()не вернёт пустой bytes-объект.
- base64.decodebytes(s)¶
Декодирует байтоподобный объект s, который должен содержать одну или несколько строк данных, закодированных в base64, и возвращает декодированный
bytes.Новое в версии 3.1.
- base64.encode(input, output)¶
Кодирует содержимое бинарного файла input и записывает полученные данные в кодировке base64 в файл output. input и output должны быть файловыми объектами. input будет читаться до тех пор, пока
input.read()не вернёт пустой bytes-объект.encode()вставляет символ новой строки (b'\n') после каждых 76 байт выходных данных, а также гарантирует, что выходные данные всегда заканчиваются новой строкой, в соответствии с RFC 2045 (MIME).
- base64.encodebytes(s)¶
Кодирует байтоподобный объект 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'
Вопросы безопасности¶Security Considerations
Новый раздел по вопросам безопасности был добавлен в RFC 4648 (раздел 12); рекомендуется ознакомиться с разделом безопасности для любого кода, развёртываемого в рабочей среде.
См. также
- Модуль
binascii Вспомогательный модуль, содержащий преобразования ASCII-в-двоичный и двоичный-в-ASCII.
- RFC 1521 – MIME (Многоцелевые расширения интернет-почты) Часть 1: Механизмы указания и описания формата тел интернет-сообщений
Раздел 5.2, «Base64 Content-Transfer-Encoding», содержит определение кодировки base64.