Кодировщик и декодер Base32hex

Преобразуйте текст, шестнадцатеричные байты или файлы в Base32 с расширенным шестнадцатеричным алфавитом и обратно. Настраивайте дополнение и регистр букв, например чтобы получить метки в стиле NSEC3.

Работает полностью в браузере. Данные никуда не загружаются.

Как пользоваться

  1. Выберите «Кодировать», чтобы перевести текст в Base32hex, или «Декодировать», чтобы получить текст из Base32hex.
  2. Оставьте выбранным вариант «Base32hex». Если этого требует ваш формат, отключите «Дополнение» или включите «Нижний регистр».
  3. Введите или вставьте входные данные либо откройте файл. Результат обновляется по мере ввода.
  4. Скопируйте результат или скачайте его в виде файла.

Что такое 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.is89GN6P9M6GN6ISO=
你好SIUQ1PD5NK======

Часто задаваемые вопросы

Чем Base32 отличается от Base32hex?
Оба используют 5 бит на символ и одинаковые правила дополнения. Стандартный Base32 использует алфавит A-Z 2-7, а Base32hex — 0-9 A-V, который сохраняет порядок сортировки данных. Эти варианты не взаимозаменяемы.
Учитывает ли Base32hex регистр?

Алфавит определён в верхнем регистре, но этот декодер принимает и строчные буквы. Если нужен результат в нижнем регистре, например для меток DNS, включите «Нижний регистр».

Нужно ли использовать дополнение?
RFC 4648 предписывает дополнять результат знаками = до длины, кратной 8 символам, но многие форматы, включая NSEC3, его опускают. Декодер принимает оба варианта, поэтому выбирайте то, что ожидает принимающая система.
Строка Base32hex — это то же самое, что шестнадцатеричная запись?
Нет. Строка Base32hex, в которой случайно оказались только символы 0-9 и A-F, выглядит как Hex, но каждый символ несёт 5 бит, а не 4. Для работы с обычным Hex воспользуйтесь инструментом Base16.