Как пользоваться
- Выберите «Кодировать», чтобы перевести текст в Base32hex, или «Декодировать», чтобы получить текст из Base32hex.
- Оставьте выбранным вариант «Base32hex». Если этого требует ваш формат, отключите «Дополнение» или включите «Нижний регистр».
- Введите или вставьте входные данные либо откройте файл. Результат обновляется по мере ввода.
- Скопируйте результат или скачайте его в виде файла.
Что такое Base32hex?
Base32hex — это «Base 32 Encoding with Extended Hex Alphabet», то есть кодирование Base32 с расширенным шестнадцатеричным алфавитом, описанное в разделе 7 RFC 4648. Оно работает точно так же, как стандартный Base32: каждый символ несёт 5 бит, каждые 5 байтов превращаются в 8 символов, а результат дополняется знаками = до длины, кратной 8. Отличается только алфавит. Вместо A-Z 2-7 Base32hex продолжает счёт там, где заканчивается шестнадцатеричная система: цифры от 0 до 9 означают значения от 0 до 9, A — это 10, а V — 31.
Поскольку у двух алфавитов большинство символов общие, строку Base32hex часто можно передать стандартному декодеру Base32 без ошибки, но полученные байты будут неверными. Всегда декодируйте тем же вариантом, которым кодировали.
Порядок сортировки сохраняется
Алфавит упорядочен по возрастанию кодов ASCII, и значение каждого символа растёт вместе с его позицией. Поэтому посимвольное сравнение двух строк Base32hex даёт тот же порядок, что и сравнение исходных байтов. RFC 4648 особо отмечает это свойство, которого нет у стандартных Base32 и Base64, и благодаря ему Base32hex хорошо подходит для ключей в упорядоченных хранилищах, например в базах данных и хранилищах «ключ — значение».
Держите все строки в одном регистре и отключайте дополнение, если входные данные различаются по длине: знак = при сортировке оказывается между цифрами и буквами и может нарушить порядок.
Base32hex в DNSSEC NSEC3
Записи NSEC3, описанные в RFC 5155, доказывают, что имя DNS не существует, и при этом затрудняют перечисление всех имён в зоне. Каждое имя хешируется с помощью SHA-1, а 20-байтовый хеш записывается как 32-символьная метка Base32hex без дополнения, обычно в нижнем регистре. Поскольку кодирование сохраняет порядок хешей, хешированные имена образуют упорядоченную цепочку. Чтобы превратить хеш в такую метку, вставьте его как шестнадцатеричные входные данные, отключите дополнение и выберите «Нижний регистр». Этот инструмент выполняет только этап кодирования и не вычисляет сам хеш NSEC3 с солью и итерациями.
Base32hex в программах
# Python 3.10+
import base64
base64.b32hexencode(b'foobar') # b'CPNMUOJ1E8======'
base64.b32hexdecode('CPNMUOJ1E8======') # b'foobar'
// Go (import "encoding/base32")
base32.HexEncoding.EncodeToString(data)
base32.HexEncoding.WithPadding(base32.NoPadding).EncodeToString(data)
Спецификация
| Алфавит | 0-9 A-V |
|---|---|
| Размер результата | 8 символов на каждые 5 байт (160%) |
| Дополнение | = до длины, кратной 8 символам |
| Стандарт | RFC 4648, раздел 7 |
| Учёт регистра | Нет |
Примеры
| Исходные данные (UTF-8) | Результат |
|---|---|
Hello, World! | 91IMOR3F5GG5ERRIDHI22=== |
Base64.is | 89GN6P9M6GN6ISO= |
你好 | SIUQ1PD5NK====== |
Часто задаваемые вопросы
Чем Base32 отличается от Base32hex?
A-Z 2-7, а Base32hex — 0-9 A-V, который сохраняет порядок сортировки данных. Эти варианты не взаимозаменяемы.Учитывает ли Base32hex регистр?
Алфавит определён в верхнем регистре, но этот декодер принимает и строчные буквы. Если нужен результат в нижнем регистре, например для меток DNS, включите «Нижний регистр».
Нужно ли использовать дополнение?
= до длины, кратной 8 символам, но многие форматы, включая NSEC3, его опускают. Декодер принимает оба варианта, поэтому выбирайте то, что ожидает принимающая система.