base64 — кодирование данных Base16, Base32, Base64 и Base85
Исходный код: Lib/base64.py
Этот модуль предоставляет функции для кодирования двоичных данных в печатные символы ASCII и декодирования таких кодировок обратно в двоичные данные. Сюда входят кодировки, определённые в RFC 4648 (Base64, Base32 и Base16), а также нестандартные кодировки Base85.
Этот модуль предоставляет два интерфейса. Современный интерфейс поддерживает кодирование объектов, подобных bytes в ASCII bytes, а также декодирование объектов, подобных bytes или строк, содержащих ASCII, в bytes. Поддерживаются оба алфавита Base64, определённые в RFC 4648 (обычный и безопасный для URL-адресов и файловых систем).
Устаревший интерфейс не поддерживает декодирование строк, но предоставляет функции для кодирования и декодирования данных из файловых объектов и в них. Он поддерживает только стандартный алфавит Base64 и добавляет символы новой строки через каждые 76 символов согласно RFC 2045. Обратите внимание: если вам нужна поддержка RFC 2045, вероятно, вам следует использовать пакет email.
Изменено в версии 3.3: Функции декодирования современного интерфейса теперь принимают строки Unicode, состоящие только из символов ASCII.
Изменено в версии 3.4: Все функции кодирования и декодирования этого модуля теперь принимают любые объекты, подобные bytes. Добавлена поддержка Ascii85/Base85.
Кодировки RFC 4648
Кодировки RFC 4648 подходят для кодирования двоичных данных, чтобы их можно было безопасно отправлять по электронной почте, использовать в составе URL-адресов или включать в запрос HTTP POST.
-
base64.b64encode(s, altchars=None) -
Кодирует объект, подобный bytes s с помощью Base64 и возвращает закодированный
bytes.Необязательный параметр altchars должен быть объектом, подобным bytes длиной 2, задающим альтернативный алфавит для символов
+и/. Это позволяет приложению, например, создавать строки Base64, безопасные для URL-адресов или файловых систем. Значение по умолчанию —None, при котором используется стандартный алфавит Base64.Может выполнить проверку assert или вызвать исключение
ValueError, если длина altchars не равна 2. Вызывает исключениеTypeError, если altchars не является объектом, подобным bytes.
-
base64.b64decode(s, altchars=None, validate=False) -
Декодирует закодированный в Base64 объект, подобный bytes, или строку ASCII s, и возвращает декодированный
bytes.Необязательный параметр altchars должен быть объектом, подобным bytes или строкой ASCII длиной 2, задающей альтернативный алфавит, используемый вместо символов
+и/.Если s имеет неправильное дополнение, вызывается исключение
binascii.Error.Если validate равно
False(по умолчанию), символы, которых нет ни в обычном алфавите Base64, ни в альтернативном алфавите, отбрасываются перед проверкой дополнения. Если validate равноTrue, наличие во входных данных символов, не принадлежащих алфавиту, приводит к исключениюbinascii.Error.Дополнительные сведения о строгой проверке Base64 см. в описании
binascii.a2b_base64()Может выполнить проверку assert или вызвать исключение
ValueError, если длина altchars не равна 2.
-
base64.standard_b64encode(s) -
Кодирует объект, подобный bytes s с помощью стандартного алфавита Base64 и возвращает закодированный
bytes.
-
base64.standard_b64decode(s) -
Декодирует объект, подобный bytes или строку ASCII s с помощью стандартного алфавита Base64 и возвращает декодированный
bytes.
-
base64.urlsafe_b64encode(s) -
Кодирует объект, подобный bytes s с помощью алфавита, безопасного для URL-адресов и файловых систем, в котором в стандартном алфавите Base64 символ
-заменяет+, а символ_заменяет/, и возвращает закодированныйbytes. Результат всё ещё может содержать=.
-
base64.urlsafe_b64decode(s) -
Декодирует объект, подобный bytes или строку ASCII s с помощью алфавита, безопасного для URL-адресов и файловых систем, в котором в стандартном алфавите Base64 символ
-заменяет+, а символ_заменяет/, и возвращает декодированныйbytes.
-
base64.b32encode(s) -
Кодирует объект, подобный bytes s с помощью Base32 и возвращает закодированный
bytes.
-
base64.b32decode(s, casefold=False, map01=None) -
Декодирует закодированный в Base32 объект, подобный bytes или строку ASCII s и возвращает декодированный
bytes.Необязательный параметр casefold — это флаг, указывающий, допустим ли во входных данных алфавит в нижнем регистре. Из соображений безопасности по умолчанию установлено значение
False.RFC 4648 допускает необязательное сопоставление цифры 0 (ноль) с буквой O (о), а также необязательное сопоставление цифры 1 (один) с буквой I (ай) или L (эль). Если необязательный аргумент map01 не равен
None, он указывает, какой букве следует сопоставить цифру 1 (когда map01 не равенNone, цифра 0 всегда сопоставляется с буквой O). Из соображений безопасности по умолчанию установлено значениеNone, поэтому цифры 0 и 1 во входных данных не допускаются.Если s имеет неправильное дополнение или во входных данных присутствуют символы, не принадлежащие алфавиту, вызывается исключение
binascii.Error.
-
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) -
Кодирует объект, подобный bytes s с помощью Base16 и возвращает закодированный
bytes.
-
base64.b16decode(s, casefold=False) -
Декодирует закодированный в Base16 объект, подобный bytes или строку ASCII s и возвращает декодированный
bytes.Необязательный параметр casefold — это флаг, указывающий, допустим ли во входных данных алфавит в нижнем регистре. Из соображений безопасности по умолчанию установлено значение
False.Если s имеет неправильное дополнение или во входных данных присутствуют символы, не принадлежащие алфавиту, вызывается исключение
binascii.Error.
Кодировки Base85
Кодирование Base85 формально не специфицировано и представляет собой скорее фактический стандарт, поэтому разные системы выполняют кодирование по-разному.
Функции a85encode() и b85encode() этого модуля реализуют два варианта фактического стандарта. Вызывайте функцию, реализация Base85 которой используется в программе, с которой вы собираетесь работать.
Две функции этого модуля отличаются обработкой следующих аспектов:
- Включать ли ограничивающие маркеры
<~и~> - Включать ли символы новой строки
- Набор символов ASCII, используемых для кодирования
- Обработка нулевых байтов
Дополнительную информацию см. в документации отдельных функций.
-
base64.a85encode(b, *, foldspaces=False, wrapcol=0, pad=False, adobe=False) -
Кодирует объект, подобный bytes 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 объект, подобный bytes или строку ASCII b и возвращает декодированный
bytes.foldspaces — флаг, указывающий, следует ли принимать короткую последовательность ‘y’ как сокращённую запись 4 пробелов подряд (ASCII 0x20). Эта возможность не поддерживается «стандартной» кодировкой Ascii85.
adobe определяет, имеет ли входная последовательность формат Adobe Ascii85 (то есть обрамлена ли она маркерами <~ и ~>).
ignorechars должен быть объектом, подобным bytes, или строкой ASCII, содержащей символы, которые следует игнорировать во входных данных. Здесь должны указываться только пробельные символы; по умолчанию включены все пробельные символы ASCII.
Добавлено в версии 3.4.
-
base64.b85encode(b, pad=False) -
Кодирует объект, подобный bytes b с помощью Base85 (например, как в двоичных различиях в стиле git) и возвращает закодированный
bytes.Если значение pad истинно, перед кодированием входные данные дополняются
b'\0', чтобы их длина стала кратной 4 байтам.Добавлено в версии 3.4.
-
base64.b85decode(b) -
Декодирует закодированный в Base85 объект, подобный bytes или строку ASCII b и возвращает декодированный
bytes. При необходимости дополнение удаляется неявно.Добавлено в версии 3.4.
-
base64.z85encode(s) -
Кодирует объект, подобный bytes s с помощью Z85 (используется в ZeroMQ) и возвращает закодированный
bytes. Дополнительные сведения см. в спецификации Z85.Добавлено в версии 3.13.
-
base64.z85decode(s) -
Декодирует закодированный в Z85 объект, подобный bytes или строку ASCII s и возвращает декодированный
bytes. Дополнительные сведения см. в спецификации Z85.Добавлено в версии 3.13.
Устаревший интерфейс
-
base64.decode(input, output) -
Декодирует содержимое двоичного файла input и записывает полученные двоичные данные в файл output. input и output должны быть файловыми объектами. Чтение из input продолжается, пока
input.readline()не вернёт пустой объект bytes.
-
base64.decodebytes(s) -
Декодирует объект, подобный bytes 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) -
Кодирует объект, подобный bytes s, который может содержать произвольные двоичные данные, и возвращает
bytesс данными, закодированными в Base64. После каждых 76 байт выходных данных вставляются символы новой строки (b'\n'), а в конце добавляется завершающий символ новой строки, согласно 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 в двоичные данные и двоичных данных в ASCII.
- RFC 1521 — MIME (многоцелевые расширения электронной почты в Интернете), часть первая: механизмы задания и описания формата тел сообщений Интернета
-
В разделе 5.2 «Base64 Content-Transfer-Encoding» дано определение кодирования Base64.
© 2001–2025 Python Software Foundation
Licensed under the PSF License.
https://docs.python.org/3.13/library/base64.html