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) Аналогично, но для потокового декодирования файлов.