Конвертер Base32 / Base58

Кодируйте текст или декодируйте закодированные строки в семи схемах: Base32 по RFC 4648 (A-Z2-7), base32hex (0-9A-V), Crockford Base32, z-base-32, Base58 Bitcoin, Base58 Flickr и Base58 Ripple. Под конвертером также находится отдельный генератор и проверка Base58Check (байт версии + контрольная сумма двойного SHA-256). Текст обрабатывается как байты UTF-8. Также: Base64 | Ascii85 | Hex-текст.
Вся обработка выполняется локально в вашем браузере — ваши данные никогда не загружаются ни на один сервер.
Как это работает: Каждый символ преобразуется в байты UTF-8, затем каждая схема упаковывает эти байты в собственный печатный алфавит.
Схема:
Как это работает: Закодированная строка декодируется обратно в байты UTF-8 и показывается как текст. Пробелы и завершающее заполнение = игнорируются; недопустимые символы сообщаются с их позицией.
Схема:
Ctrl+Enter во входном поле запускает активный режим.
Выберите «Кодировать» или «Декодировать», выберите схему и нажмите кнопку действия. Вся обработка остаётся в вашем браузере.

Кодировщик Base58Check: Байт версии (hex): Полезная нагрузка (hex):
Проверка Base58Check: Адрес или строка:
Base58Check — формат адресов Bitcoin: один байт версии, полезная нагрузка, затем первые четыре байта SHA-256, применённого дважды к байту версии и полезной нагрузке вместе. Кодирование формирует эту строку; проверка читает её обратно и сообщает, какой байт неверен, если контрольная сумма не совпадает.
О каждой схеме:
Base32 (RFC 4648) — классический алфавит без учёта регистра A-Z 2-7; 8 байт превращаются в 13 символов плюс заполнение. Широко используется для секретов HOTP/TOTP, DNSSEC и контрольных сумм файлов. Заполнение = добавляется, если его не отключить.
Base32 Hex — расширенный алфавит 0-9 A-V, который естественно сортируется лексикографически и удобен, когда закодированное значение используется ещё и как шестнадцатеричный идентификатор.
Base58 (Bitcoin) — Base64 без символов 0 O I l + /, поэтому результат никогда не содержит неоднозначных символов. Это алфавит адресов Bitcoin. Ведущие нулевые байты превращаются в цифру 1.
Base58 (Flickr) — алфавит коротких URL Flickr, чувствительный к регистру в обратном порядке: сначала цифры, затем строчные, затем прописные буквы.
Crockford Base32 — цифры и однозначные буквы 0-9 A-Z без I, L, O и U. При декодировании также принимаются I и L как 1, O как 0, строчные буквы, а дефисы считаются украшением. Можно добавить необязательный контрольный символ по модулю 37.
z-base-32 — те же группы по пять бит, что и RFC 4648 Base32, но алфавит переупорядочен так, чтобы символы, которые люди набирают чаще всего, было легче всего записать. Без заполнения и без контрольного символа.
Base58 (Ripple / XRP) — третий порядок тех же 58 символов, используемый в XRP Ledger. Первый его символ — r, поэтому адреса Ripple начинаются с этой буквы.
Base58Check — строка Base58, полезная нагрузка которой несёт четыре байта контрольной суммы, так что адрес с опечаткой можно отклонить, а не тихо отправить средства куда-то ещё. Под конвертером ниже есть отдельный генератор и проверка.
Что такое Base32 и Base58?

Это два ответа на один вопрос: канал, который переносит текст, просят переносить байты. Base32 и Base58 — не шифрование и не хеширование — они ничего не скрывают и ничего не сокращают. Они переписывают строку байтов, используя фиксированный набор читаемых символов, и любой, кто знает, какой набор использован, может сразу превратить её обратно. Единственная причина предпочесть один из них другому — то, что принимающая сторона делает с символами.

Два семейства переписывают данные совершенно по-разному, и разница объясняет почти каждый сюрприз на этой странице:

  • Упаковка битов — Base32, Base32 Hex, Crockford Base32, z-base-32. Байты режутся на фиксированные группы, и каждые пять бит становятся одним символом. Длина результата предсказуема по длине входа, а последняя, частично заполненная группа либо помечается символами заполнения, либо остаётся короткой.
  • Преобразование в большое число — все таблицы Base58. Вся строка байтов читается как одно огромное число в основании 256 и записывается заново в основании 58. Здесь нет групп и заполнения; длина ни на что не делится, а каждый ведущий нулевой байт превращается в один ведущий нулевой символ.
Куда уходят шесть информационных бит: Base32 тратит пять бит на символ, поэтому нужно восемь символов на каждые пять входных байт — примерно на 60% больше. Base58 тратит около 5,86 бита на символ, поэтому результат примерно на 37% больше. Base64 кладёт шесть бит в символ и даёт 33%. Большие алфавиты короче, но их труднее читать вслух, и именно этот компромисс выбирает каждый из них.
Семь алфавитов этой страницы

Каждый алфавит приведён полностью, а не описан, потому что два инструмента, которые выводят разные символы под одним названием, не совпадут друг с другом, как бы ни называлась метка. Строки RFC 4648 нормативны; строки Crockford и z-base-32 следуют тому, что опубликовал автор формата; три строки Base58 — широко распространённые соглашения, а не стандарты, поэтому они перечислены отдельно.

Crockford Base32 и контрольный символ по модулю 37

Алфавит исключает I, L, O и U, чтобы ни один символ нельзя было прочитать как другой. Остальное нечувствительно к регистру на входе: i и l читаются как цифра 1, o читается как цифра 0, а дефисы существуют только для удобства чтения длинной строки. Кроме того, формат определяет необязательный контрольный символ: это значение строки символов, прочитанное как число в основании 32, взятое по модулю 37 и записанное с помощью пяти дополнительных символов для значений от 32 до 36.

Контрольный символ вычисляется по строке символов, а не по байтам: поскольку кодировщик дополняет последнюю группу нулями, декодирование тех же символов всегда возвращает к тому же значению. Поэтому контрольное значение из таблицы можно воспроизвести вручную только по закодированному столбцу. Пять дополнительных символов — *, ~, $, = и U для значений 32, 33, 34, 35 и 36, поэтому контрольный символ не всегда цифра или буква.

z-base-32

z-base-32 сохраняет пятибитную упаковку RFC 4648 Base32 и меняет лишь порядок тридцати двух символов. Порядок выбран так, чтобы символы, которые человеку чаще всего придётся записывать, были самыми лёгкими для написания и наименее похожими друг на друга. Заполнения нет, поэтому читающий должен знать, сколько символов ожидается в значении; это цена формата, который создан прежде всего для чтения вручную.

Base58Check: один байт версии, полезная нагрузка, четыре байта контрольной суммы

Base58 сам по себе не может отличить строку с опечаткой от правильной, потому что почти любая комбинация его пятидесяти восьми символов является допустимым числом. Base58Check исправляет это, помещая данные в обёртку: один байт версии, затем полезная нагрузка, затем первые четыре байта SHA-256, применённого к первым двум частям дважды подряд. Принимающая программа пересчитывает эти четыре байта и отвергает строку, если они не совпадают. Байт версии сообщает кошельку, с чем он имеет дело: с адресом платежа, адресом скрипта или закрытым ключом.

Генератор под конвертером принимает байт версии и полезную нагрузку в шестнадцатеричном виде и записывает строку Base58Check; проверка читает её обратно, отделяет четыре байта контрольной суммы, пересчитывает их и сообщает как найденное, так и ожидаемое значение. Неверная контрольная сумма здесь означает, что строка набрана с ошибкой или изменена — она никогда не означает, что сама полезная нагрузка неверна, поскольку полезная нагрузка никогда не интерпретируется.

Распространённые недоразумения
  • "Base64 — это шифрование." Нет. Нет ни ключа, ни секрета; результат обратим для любого. Base32 и Base58 в том же положении, и протаскивание значения через все три не добавляет защиты.
  • "Строка Base58 — это адрес Bitcoin." Только если она также проходит проверку контрольной суммы Base58Check и содержит байт версии, который распознаёт принимающее ПО. Строки Base58 встречаются во многих других местах, включая простые идентификаторы без контрольной суммы вообще.
  • "Три алфавита Base58 взаимозаменяемы." Они используют одни и те же пятьдесят восемь символов в трёх разных порядках, поэтому одни и те же байты дают три разные строки. Инструменту нужно сообщить, какой использовать, и эта страница всегда говорит, какой использовала.
  • "Заполнение — часть значения." Символы = лишь отмечают последнюю группу. Две строки Base32, которые отличаются только заполнением, описывают одни и те же байты, поэтому декодер принимает строку с отрезанным заполнением.
  • "Работают любые символы." Каждый алфавит — фиксированный набор. Символ извне него не имеет значения, поэтому декодер останавливается и называет символ и его позицию, а не угадывает.
Частые вопросы

Почему Base32 использует 2-7, а не 0-9? Потому что RFC 4648 выбрал алфавит так, чтобы он оставался в пределах символов, допустимых в доменном имени, и чтобы его было легко читать вслух. Base32 Hex использует 0-9 A-V, когда важнее естественная сортировка.

Почему строка Base58 так часто начинается с 1? Каждый ведущий нулевой байт входа становится одной ведущей 1 (первым символом алфавитов Bitcoin и Flickr). Байт версии 0x00 — это один нулевой байт, поэтому большинство адресов Bitcoin в основной сети начинаются ровно с одной 1.

Что загружает кнопка «Пример»? Пример, относящийся к схеме и направлению, которые сейчас на экране, никогда не фиксированный текст. Кодировщику передаётся текст примера схемы — векторы RFC 4648 раздел 10 для Base32 и Base32 Hex, 12345 из Crockford, строки z-base-32, приведённые выше — а декодеру передаётся закодированная строка для выбранного алфавита, что делает пример пригодным в обоих направлениях. Три строки Base58 намеренно содержат один и тот же текст, поэтому переключение схемы и повторное нажатие «Пример» показывают три порядка одних и тех же пятидесяти восьми символов рядом. Если отмечен контрольный символ Crockford, декодеру передаётся значение с символом на конце, — это единственный способ увидеть, как проверка его принимает.

Отправляет ли эта страница мои данные куда-либо? Нет. Каждое преобразование выполняется в этой вкладке браузера, а страница не содержит никаких сетевых запросов. Поэтому она работает и с файлом, открытым прямо с диска.

Какой использовать для секрета? Секреты приложений-аутентификаторов TOTP и HOTP обычно записаны в Base32 по алфавиту RFC 4648, потому что секрет нужно вводить вручную. Используйте тот вариант, который запрашивает ваше принимающее ПО, и никогда не полагайтесь на само кодирование для секретности.