Кодировщик Base32
Base32 кодирование и декодирование по RFC 4648: побитовый разбор каждого блока, проверка ошибок, пакетный режим. Всё считается прямо в браузере.
Зачем кодировать в Base32
Base32 превращает любые байты в строку из букв A–Z и цифр 2–7 — тридцать два символа, каждый из которых несёт ровно пять бит. Кодирование нужно там, где обычный текст не проходит: в именах файлов, в DNS-записях, в одноразовых кодах доступа, в конфигурациях, которые приходится вводить руками с телефона. Важное отличие от Base64 в том, что в алфавите Base32 нет ни плюса, ни косой черты, а цифры ограничены диапазоном 2–7: символ 0 не спутать с буквой O, единицу с I. Именно поэтому Base32 часто выбирают там, где строку перечитывают глазами или диктуют вслух. Base32 — это транспортное кодирование, а не шифрование: ключа нет, и любой, кто видит строку, декодирует её без усилий.
Что умеет кодировщик Base32
- Кодирование текста в Base32 по RFC 4648 с алфавитом A–Z и 2–7
- Переключатель символов заполнения: с «=» до кратного восьми и без них
- Обратное декодирование с проверкой недопустимых символов, длины и «хвостовых» битов
- Побитовый разбор: исходные байты, группы по пять бит и получившиеся символы
- Пакетный режим: одно значение в строке, на выходе столько же строк
Как закодировать значение в Base32
- Вставьте текст в поле ввода — он будет переведён в UTF-8 и разбит на байты
- Оставьте переключатель заполнения включённым, если результат пойдёт в файл или в поле ввода
- Нажмите кнопку кодирования и заберите строку, при необходимости разверните побитовый разбор
- Для обратной операции перейдите на вкладку декодирования и вставьте строку Base32
Как это работает внутри
Алгоритм простой и целочисленный. Байты исходника складываются в один поток бит, из которого последовательно вырезаются группы по пять штук. Номер группы — это индекс символа в алфавите, поэтому A это 0, B это 1, и так до Z это 25, а «2» это 26 и «7» это 31. Пять байт дают ровно сорок бит, то есть ровно восемь символов, и благодаря этому кодирование можно вести блоками по пять байт, не теряя ни одного бита на стыках. Если в последнем блоке байт меньше пяти, недостающие биты дополняются нулями до кратности пяти, а вся строка затем дополняется символом «=» до кратности восьми. Обратное декодирование проверяет всё наоборот: остаток длины по модулю восьми должен быть одним из 0, 2, 4, 5 или 7, неиспользованные биты в конце обязаны быть нулевыми, а каждый символ обязан принадлежать алфавиту.
Примеры кодирования и декодирования в Base32
| Исходные данные | Base32 с заполнением | Комментарий |
|---|---|---|
| ToolBox | KRXW63CCN54A==== | семь байт, двенадцать символов и четыре «=» |
| foobar | MZXW6YTBOI====== | тестовый вектор из RFC 4648 |
| f | MY====== | один байт и шесть символов заполнения |
| foo | MZXW6=== | три байта и пять символов данных |
| Hello, ToolBox Pro! | JBSWY3DPFQQFI33PNRBG66BAKBZG6II= | латиница, символы видно глазами |
| MZXW6YTBOI | foobar | обратное декодирование без заполнения |
| MZXW6YTBOI====== | foobar | та же строка с корректным заполнением |
| MZXW6YTBOI= | ошибка | неверное число символов «=» |
| MZXW6YTB01 | ошибка | символы 0 и 1 не входят в алфавит |
| MZXW6Y | ошибка | длина 6 не даёт целого числа байтов |
Значения с пометкой «ошибка» оставлены специально: декодировщик должен отвергнуть их и объяснить, в чём дело.
Где Base32 встречается в работе
Первый и самый заметный случай — одноразовые коды и ключи настройки двухфакторной аутентификации. Секрет там длинный, и его показывают в виде Base32-строки с пробелами по несколько символов, чтобы было легче переписать с листа. Второй случай — идентификаторы и ключи, которые прописывают руками в конфигурацию: токены, отпечатки ключей, серийные номера лицензий. Третий — DNS: значение записи должно быть текстом, и Base32 даёт текст без символов, которые в адресе сломались бы.
Отдельно стоит работа с именами файлов. Символ «/» в имени превращает файл в подкаталог, а «+» и «?» ломают вывод в командной строке. Base32 не содержит ни одного из них, поэтому закодированное имя безопасно положить в любой каталог и передать в ссылке. По той же причине им пользуются в системах контроля версий, где имя объекта становится частью пути, и в протоколах, где идентификатор передаётся в URL-параметре — там же пригодится парсер URL.
- Ключи настройки двухфакторной аутентификации и их переписывание с бумажки
- Токены и отпечатки ключей, которые вводят в конфигурацию вручную
- Имена файлов, которые не должны содержать косой черты
- Значения DNS-записей, где формат требует текст
- Идентификаторы в URL-параметрах и в ссылках
Частые ошибки при работе с Base32
Первая ошибка — путать Base32 с Base64 и пытаться декодировать строку одним инструментом, ожидая результат другого. Алфавиты разные, символы разные, длины разные, и ошибка выглядит как «какая-то ерунда вместо текста». Вторая — забыть про регистр и пробелы: хотя Base32 по стандарту регистронезависим, в задачах, где важен канонический вид, используют верхний регистр и разбивают длинные строки пробелами каждые несколько символов.
Третья ошибка — вставить в декодировщик строку Base64. Она длиннее и выглядит похоже, но символы «+», «/» и «0» с «1» в Base32 недопустимы. Четвёртая — обрезать строку, решив, что «=» не несут данных. Для декодирования это обычно безобидно, но для проверки целостности обрезка означает потерю данных, и её лучше делать осознанно. Пятая — считать, что Base32 заменяет шифрование: секрет, отправленный в таком виде, читается любым, у кого есть декодировщик.
- Декодировать строку Base64 кодировщиком Base32
- Считать, что «=» можно выкинуть в любом месте строки
- Смешивать верхний и нижний регистр в одном блоке
- Обрезать конец строки, потеряв последний байт
- Ожидать, что Base32 заменяет шифрование
Разбор примера: как «Tool» превращается в KRXW63A=
Возьмём четыре байта: T — это 54, o — это 6F, o — это 6F, l — это 6C. В двоичном виде это восемь бит на байт, всего 32 бита. Делим поток бит на группы по пять: 01010, 10001, 10111, 10110, 11110, 11011 и ещё два бита, которым не хватает соседей справа.
Последние два бита дополняются нулями до пяти, получается группа 00000 с номером ноль, а это символ A. Теперь переводим номера групп в символы: 10 — K, 17 — R, 23 — X, 22 — W, 30 — 6, 27 — 3, 0 — A. Складываем: KRXW63A — семь символов, потому что 32 бита при делении на пять дают шесть полных групп и два бита хвоста. Длина не кратна восьми, поэтому добавляем «=» до восьми: KRXW63A=.
Что происходит на каждом шаге кодирования
| Шаг | Действие | Результат |
|---|---|---|
| 1 | Байты в hex | 54 6F 6F 6C — четыре байта исходника |
| 2 | Байты в биты | 01010100 01101111 01101111 01101100 — всего 32 бита |
| 3 | Разбивка на группы | 01010 10001 10111 10110 11110 11011 и два бита в остатке |
| 4 | Номера групп | 10, 17, 23, 22, 30, 27 и 0 после дополнения нулями |
| 5 | Символы | K, R, X, N, 5, W, A — семь символов |
| 6 | Заполнение | длина 7 не кратна 8, добавляем один символ «=» |
| 7 | Готовая строка | KRXW63A= — ровно восемь позиций |
| 8 | Обратная проверка | 8 символов дают 40 бит, из них 32 полезных и 8 нулевых |
Разбор повторяет ровно то, что делает инструмент, — свой результат можно сверить с таблицей.
Base32, Base64 и другие способы упаковать байты
Кодировок текста много, и выбор между ними сводится к трём вопросам: какой алфавит допустим, насколько важна компактность и читает ли результат человек. Base32 отвечает на первый вопрос самым строгим образом: тридцать два символа без «+», «/», «0» и «1». Base64 отвечает на второй: шесть бит на символ и рост объёма всего на треть. Есть и менее распространённые схемы: Base85 даёт восемь бит на символ и почти не увеличивает объём, но её алфавит включает непечатные символы и не проходит через текстовые каналы.
Отдельный класс — кодировки, которые выглядят как шифрование, но им не являются: шифр Цезаря и ROT13 и азбука Морзе. Они меняют символы по заранее известному правилу, и любой, кто знает правило, прочитает сообщение. Base32 из того же ряда: это способ безопасно записать данные, а не способ их спрятать. И если задача сводится к «сделать из байтов строку и потом вернуть как было», то проще всего взять кодировщик Base64 — он умеет и файлы.
- Base32: 32 символа, 5 бит на символ, рост объёма примерно на 60 процентов
- Base64: 64 символа, 6 бит на символ, рост объёма примерно на треть
- Base85: почти без роста, но алфавит не проходит через текстовые каналы
- URL-кодирование: не кодирование данных, а экранирование символов для адреса
- Punycode: только для имён доменов, а не для произвольных данных
Частые вопросы о Base32
Base32 — это шифрование?
Чем Base32 отличается от Base64?
Почему в алфавите нет цифр 0, 1, 8 и 9?
Что означают символы «=» в конце строки?
Почему декодировщик отказывается декодировать строку?
Можно ли кодировать в Base32 файлы?
Как Base32 используется в одноразовых кодах и в DNS?
Чем Base32 отличается от Base32Hex и Z-Base-32?
Похожие инструменты
Генератор JWT
Соберите и подпишите JWT по алгоритму HS256 прямо в браузере: sub, name, iat, exp и свои claims
Кодирование / Декодирование Base64
Кодируйте текст в Base64 или декодируйте строки Base64 с поддержкой Unicode
URL-кодирование / Декодирование
Кодируйте и декодируйте URL-адреса с полным или компонентным режимом
Определение кодировки
Определите кодировку текста или файла онлайн: UTF-8, UTF-16, ASCII, Windows-1251, KOI8-R. Уверенность определения, разбор байтов и превью «как выглядит текст» в разных кодировках
Кодирование / Декодирование HTML-сущностей
Кодируйте и декодируйте HTML-сущности вроде < > & "
Декодер JWT-токенов
Декодируйте JWT-токены для просмотра заголовка, полезной нагрузки и подписи
Шифр ROT13
Кодируйте или декодируйте текст с помощью шифра подстановки ROT13
Переводчик азбуки Морзе
Конвертируйте текст в азбуку Морзе и обратно с визуальным представлением и звуком