Кодирование для передачи: Base64 и hex

Base64 часто путают с шифрованием. Это распространённая и опасная ошибка. Разберём, что такое кодирование и зачем оно нужно.
Кодирование — это НЕ защита. Любой может раскодировать Base64 за секунду. Это просто способ записать данные.

Зачем вообще кодировать

Хеши и зашифрованные данные — это сырые байты, часто непечатаемые. Их нельзя просто вставить в URL, JSON или письмо: некоторые байты «сломают» текст. Кодирование превращает любые байты в безопасный набор обычных символов.

Hex: каждый байт — две цифры

Шестнадцатеричное кодирование записывает каждый байт двумя символами 0-9a-f. Так обычно показывают хеши.

import hashlib

data = "Привет".encode("utf-8")
print("Сырые байты:", data)
print("В hex:      ", data.hex())
print("Обратно:    ", bytes.fromhex(data.hex()).decode("utf-8"))
print()
print("SHA-256 в hex:", hashlib.sha256(data).hexdigest())

Base64: компактнее, чем hex

Base64 использует 64 символа (буквы, цифры, + и /) и кодирует данные плотнее hex. Им часто пересылают картинки в HTML, токены и вложения в письмах.

import base64

raw = "secret data 123".encode()
encoded = base64.b64encode(raw)
print("Исходник:   ", raw)
print("Base64:     ", encoded)
print("Декодировано:", base64.b64decode(encoded).decode())

Главное заблуждение: Base64 — это НЕ шифр

Декодирование не требует никакого ключа. Кто угодно вернёт исходные данные:

import base64

# 'Зашифровано'? Нет, просто закодировано
looks_secret = "cGFzc3dvcmQ6IGh1bnRlcjI="
print("Выглядит загадочно:", looks_secret)
print("Раскодировали без ключа:", base64.b64decode(looks_secret).decode())
print("=> Base64 НЕ скрывает данные, только переупаковывает их")

Когда что использовать

ЦельИнструмент
Скрыть данные от постороннихШифрование (AES и др.)
Доказать целостностьХеш (SHA-256)
Записать байты как текст для передачиКодирование (Base64/hex)

Часто их сочетают: данные сначала шифруют, а потом результат кодируют в Base64, чтобы безопасно отправить. Но сам по себе Base64 защиты не даёт.

Вывод:

Кодирование (Base64, hex) превращает сырые байты в безопасный для передачи текст и обратимо без ключа. Это НЕ шифрование: Base64 ничего не скрывает. Шифрование прячет, хеш проверяет целостность, кодирование — переупаковывает.
Проверьте себя
1. Чем Base64 принципиально отличается от шифрования?
ABase64 надёжнее AES
BBase64 обратим без ключа и ничего не скрывает — это просто способ записать байты текстом
CBase64 нельзя раскодировать обратно
DBase64 требует пароль для декодирования
Поддержать проект