Язык: Русский

tools / base32

base32/

Перевод текста в Base32 и обратно: стандарт RFC 4648 или Base32Hex. Текст кодируется в UTF-8, при декодировании допускаются строчные буквы, пробелы и пропущенные =.

Исходный текст

Base32

Частые вопросы

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

Base32 записывает каждые 5 байт как 8 символов из алфавита всего в 32 знака (в стандартном виде это A-Z и 2-7), поэтому результат примерно на 60% длиннее исходных данных, тогда как Base64 добавляет только около трети. Зато Base32 не зависит от регистра и не содержит цифр 0, 1, 8 и 9, которые легко спутать с буквами O, I и B. Это удобно для ручного переписывания, чтения вслух и мест, где регистр не важен, например ключей 2FA и имен файлов.

Какой вариант выбрать: стандартный Base32 или Base32Hex

Base32, который встречается в повседневной работе, включая ключи 2FA и вывод большинства библиотек по умолчанию, — это стандартный вариант (RFC 4648, раздел 6, алфавит A-Z и 2-7). Base32Hex (раздел 7, алфавит 0-9 и A-V) сохраняет порядок сортировки: закодированные строки сортируются так же, как исходные байты, поэтому его используют в DNSSEC NSEC3. Друг друга они не декодируют: при неверном выборе часто появляется ошибка «не входит в алфавит Base32», а иногда просто получается мусор.

Является ли секрет 2FA кодом Base32 и как посмотреть, что внутри

Да. Секрет TOTP (параметр secret в ссылке otpauth:// из QR-кода или ключ, который вводят вручную) обычно представляет собой стандартный Base32, чаще всего в верхнем регистре и без =, а иногда показывается группами по 4 символа через пробел; при декодировании здесь все это распознается. В результате получаются случайные байты, а не текст, поэтому, чтобы их увидеть, отметьте «Показать результат в hex». Например, JBSWY3DPEHPK3PXP — это 48 65 6c 6c 6f 21 de ad be ef. Для генерации одноразовых кодов используйте инструмент 2FA на этом сайте.

Что делать, если при декодировании появляется «Недопустимая длина», «не входит в алфавит Base32» или «= может стоять только в конце»

«Недопустимая длина» означает, что после удаления = число символов при делении на 8 дает остаток 1, 3 или 6; у допустимого Base32 остаток бывает только 0, 2, 4, 5 или 7, поэтому, скорее всего, при копировании часть символов потерялась. Сообщение «не входит в алфавит Base32» указывает позицию символа: в стандартном варианте нет 0, 1, 8 и 9, а также знаков препинания и полноширинных символов; если в данных есть символы 0-9 и A-V, возможно, это Base32Hex, поэтому смените вариант. Сообщение «= может стоять только в конце» означает, что после = есть еще данные, возможно, склеено несколько строк, и их нужно декодировать по отдельности. Пробелы, переводы строк, строчные буквы и пропущенные = ошибок не вызывают.

Что такое = в конце и можно ли его убрать

Знаки = дополняют длину до кратной 8 и не являются данными. При декодировании они не обязательны; при кодировании «Дополнять символом =» включено по умолчанию, и если дополнение не нужно, снимите отметку. Можно ли его опускать, зависит от получателя: в описании формата ссылок otpauth для Google Authenticator сказано, что secret не требует дополнения, и его обычно опускают, а base64.b32decode в Python требует дополнения и без него выдает ошибку Incorrect padding.

Что делать, если результат декодирования выглядит как «кракозябры» или появляется сообщение о недопустимом тексте UTF-8

Это значит, что декодированные байты не являются текстом UTF-8. Ключи 2FA, хеши и зашифрованные данные изначально двоичные: отметьте «Показать результат в hex», чтобы увидеть исходные байты. Инструмент показывает текст только в UTF-8. Если исходный текст был в GBK или другой кодировке, сначала отметьте hex, затем откройте на этом сайте инструмент «Текст в hex», выберите GBK и превратите байты обратно в текст.

Почему результат кодирования отличается от Python или другого языка

Проверьте три вещи. Во-первых, нет ли в конце ввода лишнего перевода строки или пробела: инструмент кодирует текст в UTF-8 ровно в том виде, в каком он введен, и не обрезает его. Во-вторых, совпадает ли вариант: в Python стандартный вариант — это base64.b32encode, а Base32Hex — base64.b32hexencode (есть с версии 3.10). В-третьих, включено ли дополнение =. Варианты с другим алфавитом, например Crockford и z-base-32, не поддерживаются, и результат у них не совпадет.

Отправляется ли введенный текст на сервер

Нет. Кодирование и декодирование выполняются в браузере, запросы не отправляются, ничего не сохраняется; секрет 2FA не покидает ваш браузер.