Base64, hex и ROT13: почему кодировка — это не шифрование
Учимся узнавать популярные кодировки на глаз и разбираемся, чем кодирование отличается от шифрования и хеширования.
В CTF и в реальных системах постоянно встречаются странные строки вроде Q29kZUFyZW5h или 436f6465. Часто это вовсе не шифр, а кодировка — и прочитать её может любой.
Три разных вещи
- Кодирование меняет представление данных, чтобы их было удобно передавать. Ключа нет, обратное преобразование знает каждый. Примеры: Base64, hex, URL-кодирование.
- Шифрование прячет данные: без ключа их не прочитать. Примеры: AES, RSA.
- Хеширование — одностороннее преобразование: из хеша нельзя получить исходные данные, только проверить совпадение. Примеры: SHA-256, Argon2.
Если для обратного преобразования не нужен секретный ключ — это не защита, это упаковка.
Как узнать кодировку на глаз
- Base64 — латиница обоих регистров, цифры,
+и/, часто=или==в конце. Длина кратна 4. Пример:Q29kZUFyZW5h→CodeArena. - Hex — только
0-9иa-f, чётная длина. Каждые два символа — один байт:41→A. - Base32 — заглавные буквы и цифры 2–7, часто много
=в конце. - ROT13 — текст похож на слова, но буквы «не те»:
Uryyb→Hello. Это сдвиг алфавита на 13, повторное применение возвращает исходный текст. - URL-кодирование —
%20,%3Dи подобные пары после знака процента.
Попробуйте декодировать
import base64, codecs
base64.b64decode("Q29kZUFyZW5h").decode() # 'CodeArena'
bytes.fromhex("436f6465").decode() # 'Code'
codecs.decode("Uryyb", "rot13") # 'Hello'Практика
Пройдите короткую серию: Base64, Hex-дамп, Base32, ROT13 и URL-кодирование. После неё такие строки будете узнавать с первого взгляда.