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

Добавьте 4-байтовую контрольную сумму на основе двойного SHA-256 и закодируйте данные в Base58 или декодируйте строку Base58Check, проверьте её контрольную сумму и посмотрите байт версии и полезную нагрузку.

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

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

  1. Выберите «Кодировать», чтобы получить строку Base58Check, или «Декодировать», чтобы проверить строку и восстановить её байты.
  2. Для кодирования переключите формат ввода на Hex и введите байт версии, а за ним полезную нагрузку, например 00 и 20-байтовый HASH160.
  3. Оставьте параметр «Контрольная сумма Base58Check» включённым. При кодировании контрольная сумма добавляется, а при декодировании проверяется.
  4. Для декодирования вставьте строку и выберите формат вывода Hex. Вы получите байт версии и полезную нагрузку без контрольной суммы.

Как работает Base58Check

  1. Сначала идёт байт версии, указывающий тип данных, а за ним полезная нагрузка, например 20-байтовый хеш открытого ключа.
  2. Эти байты хешируются с помощью SHA-256, результат ещё раз хешируется SHA-256, и первые 4 байта берутся в качестве контрольной суммы.
  3. Контрольная сумма добавляется в конец, и всё вместе кодируется в Base58. Каждый ведущий байт 0x00 превращается в 1.

Этот инструмент вычисляет контрольную сумму ровно по тем байтам, которые вы ввели. Байт версии он не добавляет, поэтому укажите его в начале входных данных. При декодировании контрольная сумма заново вычисляется по всем байтам, кроме последних 4. Если они совпадают, вы получаете байт версии и полезную нагрузку, если нет — ошибку контрольной суммы. Случайная опечатка остаётся незамеченной лишь примерно в одном случае из четырёх миллиардов.

Распространённые байты версии

Байт версииДанныеНачало закодированной строки
0x00Адрес Bitcoin P2PKH (20-байтовый HASH160)1
0x05Адрес Bitcoin P2SH (20-байтовый хеш скрипта)3
0x6FАдрес P2PKH в тестовой сети Bitcoinm или n
0x80Закрытый ключ WIF (32 байта плюс 0x01 для сжатого ключа)5, для сжатого ключа K / L

Адреса SegWit и Taproot, начинающиеся с bc1, используют Bech32, а не Base58Check, и декодировать их здесь нельзя. Адреса XRP Ledger используют ту же контрольную сумму, но с алфавитом Ripple: выберите Ripple в списке «Алфавит».

Пример: от HASH160 к адресу

Известный адрес, связанный с генезис-блоком Bitcoin, состоит из байта версии 00 и 20-байтового HASH160. Если ввести эти байты в формате Hex с включённой контрольной суммой Base58Check, получится знакомый адрес:

Input (Hex)  00 62e907b15cbf27d5425399ebf6f0fb50ebb88f18
Output       1A1zP1eP5QGefi2DMPTfTL5SLmv7DivfNa

В коде можно использовать Python-пакет base58 с функциями b58encode_check() и b58decode_check() или npm-пакет bs58check с функциями encode() и decode().

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

Алфавит1-9 A-Z a-z без 0 O I l
Размер результатаОколо 137% плюс 4-байтовая контрольная сумма
ДополнениеНет
СтандартBitcoin Base58Check
Учёт регистраДа

Примеры

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

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

Почему при декодировании возникает ошибка контрольной суммы?
Либо в строке опечатка, либо выбран не тот алфавит, либо это обычный Base58 без контрольной суммы. Обычные строки Base58, например адреса Solana и CID в IPFS, нужно декодировать на странице Base58.
Добавляет ли инструмент байт версии сам?
Нет. Контрольная сумма вычисляется по введённым вами байтам, поэтому байт версии должен входить во входные данные. Переключите формат ввода на Hex и введите его первым, например 00 для адреса Bitcoin.
Можно ли декодировать закрытый ключ WIF?
Да. Вставьте его на вкладке «Декодировать» и выберите формат вывода Hex. Вы получите 80, 32-байтовый ключ и, для сжатых ключей, завершающий байт 01. Декодирование выполняется локально в браузере, но с настоящими закрытыми ключами всё равно обращайтесь осторожно.
Можно ли декодировать адреса bc1?

Нет. Нативные адреса SegWit и Taproot используют Bech32 или Bech32m — другую кодировку со своей контрольной суммой. В Bitcoin Base58Check применяется только для устаревших адресов, начинающихся с 1 или 3 (m, n или 2 в тестовой сети).