Все статьи

Base32: чем отличается от Base64 и когда удобнее

Base32 — это способ превратить любые байты в строку, которую человек может продиктовать по телефону, не путая символы. Алфавит — всего 32 буквы и цифры (A–Z, 2–7), поэтому даже плохая слышимость или акцент не мешают собеседнику записать код правильно.

Почему обычная диктовка кода — плохая идея

Если сотрудник поддержки диктует клиенту код активации или ключ лицензии, кириллические «О» и «0», «З» и «3» на слух почти неотличимы, а латинские буквы в русской речи произносятся вперемешку с их названиями («латинская эль», «инглиш ди»). Base32 обходит эту проблему на уровне алфавита: он вообще не использует 0, 1, 8, 9 и буквы O, I, L, которые чаще всего путают при устной передаче — то есть отпадает необходимость уточнять «эль как буква или единица».

Регистр не имеет значения — и это специально

Base32 декодируется одинаково, наберёте вы код заглавными буквами или строчными. Это удобно, когда пользователь переписывает код от руки или вводит его на телефоне, где автозамена текста может сама изменить регистр первой буквы предложения.

Где встречается на практике

  • Секрет для приложений двухфакторной аутентификации (Google Authenticator, Яндекс Ключ) — при ручной настройке без QR-кода вводится именно Base32-строка.
  • Адреса скрытых сервисов Tor (.onion) — весь адрес, кроме домена верхнего уровня, это Base32.
  • Идентификаторы, которые могут оказаться в доменных именах или поддоменах, где регистр букв не различается.

Цена читаемости — длина строки

Меньший алфавит означает, что на кодирование одного байта уходит больше символов: результат примерно на 60% длиннее, чем в Base64. Для секрета из 20 байт разница в 4 символа несущественна, но для мегабайтного файла Base32 совершенно не годится — там применяют Base64 или прямое двоичное представление.

Base32 и Base32hex — разные алфавиты, разный результат

Помимо стандартного Base32 (A–Z2–7) существует Base32hex с алфавитом 0–9A–V, который сохраняет тот же порядок сортировки строк, что и порядок исходных байтов — это важно для индексов некоторых баз данных. Строка, закодированная одним вариантом, не декодируется другим — прежде чем декодировать чужие данные, стоит уточнить, какой именно вариант использовался.

Попробовать инструмент