Как пользоваться
- Выберите «Кодировать», чтобы перевести текст в Base32, или «Декодировать», чтобы получить текст из Base32.
- Выберите «Вариант». По умолчанию используется RFC 4648: именно его применяют для секретов TOTP и в большинстве библиотек.
- Введите или вставьте входные данные либо откройте файл. Результат обновляется по мере ввода.
- Скопируйте результат или скачайте его в виде файла.
Что такое Base32?
Base32 представляет двоичные данные с помощью 32 печатных символов. Каждый символ несёт 5 бит, поэтому каждые 5 входных байтов превращаются в 8 выходных символов. Результат примерно на 60% больше исходных данных — это больше, чем у Base64, зато в алфавите нет строчных букв и легко путаемых символов.
Стандартный алфавит из RFC 4648 состоит из букв A-Z и цифр 2-7. Цифры 0, 1, 8 и 9 исключены, чтобы их нельзя было спутать с буквами O, I и B. Если длина входных данных не кратна 5 байтам, результат дополняется знаками = до длины, кратной 8 символам.
Где используется Base32
- Двухфакторная аутентификация. Секреты TOTP и HOTP в приложениях-аутентификаторах (значение
secret=в ссылкеotpauth://) — это строки Base32. - Системы, не учитывающие регистр. Алфавит использует только один регистр, поэтому Base32 без потерь проходит через файловые системы, метки DNS и адреса электронной почты, которые не различают регистр.
- Коды, которые вводят люди. В лицензионных ключах, onion-адресах и коротких идентификаторах применяют Base32, потому что такие строки проще продиктовать и набрать.
Если размер важнее удобочитаемости, компактнее будет Base64. Если нужны короткие идентификаторы без путаницы в символах, сравните Crockford Base32 и Base58.
Варианты Base32
| Вариант | Алфавит | Типичное применение |
|---|---|---|
| RFC 4648 | A-Z 2-7 | Секреты TOTP, универсальное применение |
| Base32hex | 0-9 A-V | Порядок сортировки совпадает с исходными байтами, DNSSEC NSEC3 |
| Crockford | 0-9 A-Z без I, L, O, U | Удобочитаемые идентификаторы, ULID |
| z-base-32 | нижний регистр, переставленный алфавит | Ключи, удобные для людей, OpenPGP WKD, ZRTP |
Base32 в коде
# Python
import base64
base64.b32encode(b'hello') # кодирование
base64.b32decode('NBSWY3DP') # декодирование
// В Node.js нет встроенного Base32; используйте пакет, например "hi-base32"
// Go (import "encoding/base32")
base32.StdEncoding.EncodeToString(data)
Спецификация
| Алфавит | A-Z 2-7 |
|---|---|
| Размер результата | 8 символов на каждые 5 байт (160%) |
| Дополнение | = до длины, кратной 8 символам |
| Стандарт | RFC 4648, раздел 6 |
| Учёт регистра | Нет |
Примеры
| Исходные данные (UTF-8) | Результат |
|---|---|
Hello, World! | JBSWY3DPFQQFO33SNRSCC=== |
Base64.is | IJQXGZJWGQXGS4Y= |
你好 | 4S62BZNFXU====== |
Часто задаваемые вопросы
Учитывает ли Base32 регистр?
Алфавит RFC 4648 определён в верхнем регистре, но этот декодер принимает и строчные буквы. Если нужен результат в нижнем регистре, включите параметр «Нижний регистр».
Почему моя строка Base32 заканчивается знаками =?
Знаки равенства — это дополнение, которое заполняет последний блок до 8 символов. Многие системы, включая большинство приложений TOTP, принимают Base32 без дополнения. Чтобы убрать его, отключите «Дополнение».
Насколько Base32 больше исходных данных?
Каждые 5 байтов превращаются в 8 символов, поэтому результат Base32 примерно в 1,6 раза больше входных данных. У Base64 это примерно 1,33 раза.
Можно ли декодировать секрет TOTP этим инструментом?
Да. Вставьте секрет на вкладке «Декодировать» и выберите вывод в Hex, чтобы увидеть исходные байты ключа. Пробелы в секрете игнорируются.