base64 — Кодирование данных Base16, Base32, Base64, Base85
Исходный код: 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: ASCII-только строки Unicode теперь принимаются функциями декодирования современного интерфейса.
Изменено в версии 3.4: Любые байтовые объекты теперь принимаются всеми функциями кодирования и декодирования в этом модуле. Добавлена поддержка Ascii85/Base85.
Современный интерфейс предоставляет:
-
base64.b64encode(s, altchars=None) -
Кодирует объект типа байтов s с помощью Base64 и возвращает закодированный
bytes.Необязательный параметр altchars должен быть объектом типа байтов длины 2, который задаёт альтернавный алфавит для символов
+и/. Это позволяет приложению, например, генерировать строки Base64, безопасные для использования в URL или файловых системах. По умолчанию используетсяNone, что соответствует стандартному алфавиту Base64.Может вызывать или генерировать исключение
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 (как используется, например, в бинарных дифференциалах в стиле 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.encode(input, output) -
Кодирует содержимое двоичного файла input и записывает полученные закодированные в base64 данные в файл output. input и output должны быть объектами файлов. input будет читаться до тех пор, пока
input.read()не вернёт пустой объект байтов.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'
Рекомендации по безопасности
В RFC 4648 (раздел 12) был добавлен новый раздел рекомендаций по безопасности; рекомендуется ознакомиться с разделом по безопасности для любого кода, развернутого в производстве.
См. также
-
Modulebinascii -
Модуль поддержки, содержащий преобразования между ASCII и двоичным представлениями.
- RFC 1521 - MIME (Multipurpose Internet Mail Extensions) Часть первая: Механизмы для указания и описания формата сообщений интернет-почты
-
Раздел 5.2 «Кодирование содержимого Base64» содержит определение кодирования base64.
© 2001–2023 Python Software Foundation
Licensed under the PSF License.
https://docs.python.org/3.11/library/base64.html