Кодировщик и декодер с пользовательским алфавитом

Введите собственный алфавит или начните с шаблона, а затем кодируйте или декодируйте с его помощью. Выберите «Большое число (как в Base58)» для алфавита любой длины или «Группы битов (как в RFC 4648)» для результата в стиле RFC 4648.

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

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

  1. Введите свой алфавит или выберите шаблон и отредактируйте его. Каждый символ может встречаться только один раз.
  2. Выберите метод: «Большое число (как в Base58)» для алфавита любой длины или «Группы битов (как в RFC 4648)» для алфавитов из 2, 4, 8, 16, 32 или 64 символов.
  3. Для групп битов при желании укажите символ дополнения, которого нет в алфавите.
  4. Закодируйте текст или вставьте строку, записанную вашим алфавитом, чтобы декодировать её.

Два способа сопоставить байты и символы

Большое число работает как Base58. Все входные данные читаются как одно большое целое число, которое раз за разом делится на длину алфавита; каждый остаток определяет символ. Метод подходит для любого алфавита из 2 и более символов, например из 10, 36, 58 или 62. Ведущие нулевые байты записываются первым символом алфавита, поэтому они сохраняются при кодировании и обратном декодировании. Дополнения нет, а объём входных данных ограничен примерно 20 КБ, потому что на длинных данных вычисления становятся медленными.

Группы битов работают как RFC 4648. Входные данные разрезаются на фрагменты с фиксированным числом битов: 1 бит для алфавита из 2 символов, 4 бита для 16, 5 битов для 32 и 6 битов для 64. Каждый фрагмент — это индекс в алфавите. Именно так работают hex, Base32 и Base64, и длина результата зависит только от длины входных данных.

Почему два метода дают разные результаты

Один метод кодирует числовое значение данных, другой — их биты позиция за позицией. Результаты обычно различаются, и строку нужно декодировать тем же методом, которым она была получена.

АлфавитВходные данныеГруппы битовБольшое число
Стандартный Base64HiSGk=Ehp
Base32 по RFC 4648HiJBUQ====SDJ
01A010000011000001
0123456789Hiнедоступно18537

С группами битов и = в качестве дополнения стандартные алфавиты воспроизводят обычные Base64 и Base32. Большое число отбрасывает ведущий нулевой бит A, потому что записывает значение, а не фиксированное число битов. Если алфавитом служат десять цифр, этот метод просто показывает байты Hi как десятичное число.

Символ дополнения применяется только к группам битов. Результат дополняется до длины, кратной 4 символам, для алфавитов из 64 символов и до длины, кратной 8, для алфавитов из 32 и 8 символов. При 2, 4 или 16 символах каждый байт заполняет целое число символов, поэтому дополнение никогда не требуется.

Правила для корректного алфавита

  • Не менее двух символов.
  • Без повторов. Декодер сопоставляет каждому символу ровно одно значение. Если бы a означал и 0, и 10, строку с этим символом нельзя было бы декодировать.
  • Регистр имеет значение. a и A — разные символы.
  • Символа дополнения не должно быть в алфавите, иначе его нельзя было бы отличить от данных.

Всё работает в вашем браузере, поэтому ваш алфавит и данные остаются на вашем устройстве.

Когда пригодится пользовательский алфавит

  • Обфускация идентификаторов. Перемешанный алфавит превращает идентификаторы в токены без очевидной закономерности. Это скрывает, но не защищает: любой, кто знает алфавит, может их декодировать.
  • Проприетарные и устаревшие форматы. Скопируйте алфавит системы из её документации и декодируйте её данные напрямую.
  • Обучение. Сравните алфавиты разной длины и оба метода, чтобы увидеть, как работает перевод между системами счисления. Фиксированные алфавиты описаны на страницах Base58 и Base62.

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

Чем отличаются методы «Большое число» и «Группы битов»?

Большое число переводит все входные данные как одно целое число в новую систему счисления, как Base58, и работает с алфавитом любой длины. Группы битов делят входные данные на фрагменты фиксированного размера, как Base64, и требуют алфавита из 2, 4, 8, 16, 32 или 64 символов.

Почему мой алфавит Base64 не даёт такой же результат, как стандартный Base64?

Стандартный Base64 использует группы битов. Чтобы получить тот же результат, выберите метод «Группы битов (как в RFC 4648)» и задайте = в качестве символа дополнения. Метод большого числа с тем же алфавитом даёт совершенно другую строку.

Почему нельзя повторять символы?

Каждый символ должен декодироваться ровно в одно значение. Повторяющийся символ имел бы два значения, и исходные данные нельзя было бы надёжно восстановить.

Можно ли использовать символ дополнения с методом большого числа?

Нет. У результата метода большого числа нет фиксированного размера блока, поэтому дополнять нечего. Параметр «Символ дополнения» применяется только к группам битов.

Является ли пользовательский алфавит формой шифрования?

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