Кодировщик 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

  1. Вставьте текст в поле ввода — он будет переведён в UTF-8 и разбит на байты
  2. Оставьте переключатель заполнения включённым, если результат пойдёт в файл или в поле ввода
  3. Нажмите кнопку кодирования и заберите строку, при необходимости разверните побитовый разбор
  4. Для обратной операции перейдите на вкладку декодирования и вставьте строку Base32

Как это работает внутри

Алгоритм простой и целочисленный. Байты исходника складываются в один поток бит, из которого последовательно вырезаются группы по пять штук. Номер группы — это индекс символа в алфавите, поэтому A это 0, B это 1, и так до Z это 25, а «2» это 26 и «7» это 31. Пять байт дают ровно сорок бит, то есть ровно восемь символов, и благодаря этому кодирование можно вести блоками по пять байт, не теряя ни одного бита на стыках. Если в последнем блоке байт меньше пяти, недостающие биты дополняются нулями до кратности пяти, а вся строка затем дополняется символом «=» до кратности восьми. Обратное декодирование проверяет всё наоборот: остаток длины по модулю восьми должен быть одним из 0, 2, 4, 5 или 7, неиспользованные биты в конце обязаны быть нулевыми, а каждый символ обязан принадлежать алфавиту.

Примеры кодирования и декодирования в Base32

Исходные данныеBase32 с заполнениемКомментарий
ToolBoxKRXW63CCN54A====семь байт, двенадцать символов и четыре «=»
foobarMZXW6YTBOI======тестовый вектор из RFC 4648
fMY======один байт и шесть символов заполнения
fooMZXW6===три байта и пять символов данных
Hello, ToolBox Pro!JBSWY3DPFQQFI33PNRBG66BAKBZG6II=латиница, символы видно глазами
MZXW6YTBOIfoobarобратное декодирование без заполнения
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Байты в hex54 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: оно переводит байты в печатные символы, но не прячет содержимое. Ключа нет, ключ не нужен, и любой человек с тем же инструментом декодирует строку мгновенно. Если вам нужно спрятать содержимое, нужен настоящий шифр: симметричный, например AES, или асимметричный, например RSA либо схемы на эллиптических кривых. Base32 имеет смысл там, где нужно безопасно передать данные через канал, который не любит двоичные данные: почту, URL, DNS, командную строку. Отдельный случай — коды доступа: там Base32 выбирают не ради защиты, а ради того, чтобы секрет можно было переписать с бумажки без опечаток.

Чем Base32 отличается от Base64?

Главное отличие — алфавит и цена. Base64 использует 64 символа: латинские буквы в обоих регистрах, цифры, плюс, косая черта и знак равенства. Один символ несёт шесть бит, поэтому исходный объём растёт примерно на треть. Base32 берёт 32 символа, один символ несёт пять бит, а объём растёт примерно на 60 процентов. Зато в Base32 нет символов, которые ломают имена файлов и адреса: «+» и «/» в пути или в URL — это проблема, а в Base32 их просто нет. Ещё в Base32 убраны ноль и единица, которые легко спутать с буквами O и I, — это удобно, когда строку читают вслух или вводят с телефона. Про двоичный код и кодирование Base64 — это разные задачи с разными правилами.

Почему в алфавите нет цифр 0, 1, 8 и 9?

Так выбраны 32 символа из 36 возможных: 26 букв плюс десять цифр дают тридцать шесть, а лишние четыре убирают. Взяты цифры от 2 до 7 — это ровно шесть штук, и вместе с буквами получаются нужные 32. Причина в читаемости: ноль путают с буквой O, единицу с I, а восьмёрку и девятку с другими цифрами при плохом освещении или при наборе на маленькой клавиатуре. В одноразовых кодах доступа и в секретах TOTP это важно: код набирают с телефона или переписывают с бумажки, и одна ошибка в символе означает отказ доступа. Base32 решает это конструктивно, а не запретом символов.

Что означают символы «=» в конце строки?

Это символ заполнения, а не часть данных. По RFC 4648 длина результата Base32 должна быть кратна восьми, и если последний блок неполный, недостающие позиции закрываются знаком «=». Получается «MY======» вместо «MY» и «MZXW6===» вместо «MZXW6». Символ «=» не несёт данных и при декодировании просто отбрасывается, но проверять его количество стоит: неправильное число «=» означает, что строка либо обрезана, либо склеена из двух. Декодировщик в этом инструменте отличает корректную строку от такой ошибки и говорит, чего именно не хватает. Отдельный вариант — Base32 без заполнения: он используется там, где символ «=» запрещён, например в некоторых идентификаторах и в одноразовых паролях.

Почему декодировщик отказывается декодировать строку?

Проверок три, и каждая ловит свою ошибку. Первая — символ: в алфавите Base32 допустимы только буквы A–Z и цифры 2–7, поэтому «1», «0», «8» и любой русский символ считаются ошибочными, и инструмент показывает позицию. Вторая — длина: без заполнения допустимые остатки от деления на восемь — это 0, 2, 4, 5 и 7, а остатки 1, 3 и 6 физически не дают целого числа байтов. Третья — «хвостовые» биты: если неиспользованные биты в конце не нулевые, строка неканоническая, и декодировать её можно, но результат зависит от того, как именно отбросить лишнее. Это признак того, что строку правили вручную или обрезали.

Можно ли кодировать в Base32 файлы?

Формально да, но практической пользы мало. Кодирование превращает файл в текст, который нужно куда-то положить, а чтобы получить обратно, нужно сначала скачать этот текст и только потом декодировать. Настоящие бинарные форматы для этого не годятся: ZIP и RAR уже умеют сжимать и хранить что угодно, а внутри архивов файлы лежат как есть. Base32 полезен там, где текст обязателен: в идентификаторах, в полях форм, в конфигурационных ключах, в одноразовых кодах. Если вам нужно просто упаковать и распаковать данные без потерь, посмотрите конвертер Base64 — там же есть режим работы с картинкой.

Как Base32 используется в одноразовых кодах и в DNS?

В одноразовых кодах секрет хранится в виде Base32-строки: приложение показывает его пользователю как «ключ настройки», а потом каждый раз, когда вы вводите шестизначный код, считает на сервере и на телефоне одно и то же значение по времени. Секрет длинный, поэтому вводить его руками неудобно — его показывают как QR-код, а формат Base32 выбран именно потому, что символы не путаются при чтении с экрана. В DNS Base32 встречается в записях, где значение обязано быть текстом: в TXT-записях или в имени ресурса. В обоих случаях важен не секретность, а отсутствие символов, которые сломали бы запись.

Чем Base32 отличается от Base32Hex и Z-Base-32?

Это варианты того же Base32 с другим алфавитом, и они не взаимозаменяемы. Базовый RFC 4648 использует A–Z и 2–7. Base32Hex, описанный в RFC 4648 отдельно, использует цифры 0–9 и буквы A–V: порядок символов другой, поэтому строка, закодированная одним вариантом, не декодируется другим. Z-Base-32 — это не стандарт IETF, а самостоятельная схема с человекочитаемым порядком символов, её используют в некоторых файловых системах и в протоколах, где важна сортировка. Если вы встретили Base32-строку и не знаете, каким вариантом она сделана, сначала посмотрите на алфавит: есть ли в ней цифры 8 или 9, нет ли цифр 0 и 1.

Похожие инструменты

Генератор 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

Переводчик азбуки Морзе

Конвертируйте текст в азбуку Морзе и обратно с визуальным представлением и звуком