Кодировщик и декодер Crockford Base32

Преобразуйте текст, шестнадцатеричные байты или файлы в Base32 Дугласа Крокфорда и обратно. Декодер прощает опечатки: он игнорирует регистр и дефисы, читает O как 0, а I и L как 1.

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

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

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

Что такое Crockford Base32?

Дуглас Крокфорд разработал этот алфавит Base32 для идентификаторов, которые люди читают, набирают и произносят вслух. В нём десять цифр и 22 заглавные буквы: 0123456789ABCDEFGHJKMNPQRSTVWXYZ. Буквы I и L исключены, потому что похожи на цифру 1, O — потому что похожа на 0, а U — чтобы снизить вероятность случайно составить непристойное слово.

Каждый символ несёт 5 бит, поэтому 5 байтов превращаются в 8 символов, как и в Base32 по RFC 4648. Символы расположены по возрастанию кодов ASCII, поэтому строки без дополнения в одном регистре сортируются в том же порядке, что и закодированные в них данные. Спецификация Крокфорда не использует дополнение, поэтому параметр «Дополнение» должен оставаться отключённым.

Декодирование, терпимое к опечаткам

Спецификация Крокфорда требует, чтобы декодеры принимали то, что люди набирают на самом деле, и этот инструмент так и делает:

  • Заглавные и строчные буквы считаются одинаковыми.
  • Буква O читается как цифра 0, а буквы I и L — как 1.
  • Дефисы, которые можно вставлять для удобства чтения длинных кодов, игнорируются, как и пробелы и переводы строк.

Буква U недопустима, и о ней сообщается вместе с её позицией.

Байты, числа и ULID

Крокфорд описывает свою кодировку в терминах чисел, а этот инструмент кодирует последовательность байтов группами по 5 бит, как в RFC 4648, используя символы Крокфорда. Если количество бит не кратно 5, реализации на основе чисел ставят лишние нулевые биты в начало, а этот инструмент — в конец, поэтому результаты могут различаться.

Распространённый пример — ULID. Он использует алфавит Крокфорда, но кодирует своё 128-битное значение как число из 26 символов, поэтому 16 байтов ULID здесь кодируются не в ту же строку, а при декодировании ULID получаются байты, сдвинутые на два бита. Необязательный контрольный символ из спецификации Крокфорда, то есть дополнительный символ для значения по модулю 37, не поддерживается: этот инструмент его не добавляет и не проверяет.

Спецификация

Алфавит0-9 A-Z без I L O U
Размер результата8 символов на каждые 5 байт (160%)
ДополнениеНет
СтандартCrockford Base32 (2002)
Учёт регистраНет

Примеры

Исходные данные (UTF-8)Результат
Hello, World!91JPRV3F5GG5EVVJDHJ22
Base64.is89GQ6S9P6GQ6JWR
你好WJYT1SD5QM

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

Учитывает ли Crockford Base32 регистр?

Нет. По умолчанию результат выводится в верхнем регистре, а параметр «Нижний регистр» переключает его на строчные буквы. Декодер принимает оба варианта, даже вперемешку в одной строке.

Почему в алфавите нет I, L, O и U?

I и L легко спутать с 1, а O — с 0, поэтому они исключены и при декодировании читаются как эти цифры. U исключена, чтобы случайные коды реже складывались в оскорбительные английские слова.

Поддерживает ли этот инструмент контрольный символ Крокфорда?
Нет. Спецификация допускает необязательный дополнительный символ с контрольной суммой по модулю 37, для которого используются дополнительные символы * ~ $ = U. Этот инструмент его не добавляет и не проверяет, поэтому удалите контрольный символ перед декодированием.
Можно ли декодировать здесь ULID?

Получить ровно его 16 байтов не получится. ULID кодирует свои 128 бит как одно число с лишними битами в начале, а этот инструмент работает с группами байтов и ставит их в конец. Чтобы прочитать метку времени и случайную часть, используйте библиотеку для ULID.