base64 — Кодирование данных Base16, Base32, Base64
Модуль base64 предоставляет функции для перевода любых бинарных данных (картинок, файлов, сжатого кода) в безопасную текстовую строку (набор печатных ASCII-символов). Это широко применяется для передачи картинок прямиком в HTML и отправки токенов в HTTP-заголовках или JSON.
import base64
Базовое кодирование и декодирование
Все функции base64 в Python 3 ожидают бинарные строки bytes, поэтому обычный текст str перед использованием необходимо кодировать через .encode().
import base64
text = "Привет, мир!"
byte_data = text.encode('utf-8')
# 1. Закодировать в Base64
encoded = base64.b64encode(byte_data)
# Метод вернет b'0J/RgNC40LLQtdGCLCDQvNC40YAh'
print(encoded.decode('ascii')) # Распечатать как текст
# 2. Декодировать обратно
decoded = base64.b64decode(encoded)
print(decoded.decode('utf-8')) # Привет, мир!
URL-Безопасный формат
Стандартный алфавит Base64 использует символы + и /, которые ломают URL-адреса. Для создания ссылок, токенов и названий файлов используйте безопасную функцию:
import base64
data = b"binary_payload.../?+"
url_safe = base64.urlsafe_b64encode(data)
# Заменяет небезопасные символы на дефисы и подчеркивания
Полный справочник API (API Reference)
Современные функции для памяти
| Функция | Описание |
|---|---|
base64.b64encode(s) |
Кодирует объект s (байты) стандартным алфавитом Base64. |
base64.b64decode(s) |
Декодирует строку байт из формата Base64 обратно в сырые данные. |
base64.urlsafe_b64encode(s) |
Кодирует данные в безопасную для URL-адресов строку (заменяет + на -, а / на _). |
base64.urlsafe_b64decode(s) |
Декодирует безопасную Base64 строку. |
base64.b32encode(s) |
Кодирует в формат Base32 (алфавит больше, нет нижнего регистра). |
base64.b16encode(s) |
Кодирует в формат Base16 (по сути, обычное шестнадцатеричное Hex представление). |
Функции для файлов
| Функция | Описание |
|---|---|
base64.encode(input_file, output_file) |
Берет открытый на чтение файл input_file, кодирует его и по частям пишет в output_file. Полезно для огромных файлов. |
base64.decode(input_file, output_file) |
Аналогично, но для потокового декодирования файлов. |