Конвертер Base58 в Hex

Вставьте строку Base58, например адрес Bitcoin, открытый ключ Solana или хеш IPFS, и получите её необработанные байты в шестнадцатеричном виде. Каждая ведущая 1 превращается в байт 00.

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

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

  1. Вставьте строку Base58 в поле ввода. Пробелы и переносы строк игнорируются.
  2. Декодированные байты в шестнадцатеричном виде появятся в поле вывода.
  3. Скопируйте hex или нажмите кнопку «Поменять ввод и вывод местами», чтобы преобразовать hex обратно в Base58.

Как Base58 превращается в hex

Base58 читает всю строку как одно большое число, записанное 58-символьным алфавитом Bitcoin, в котором нет 0, O, I и l. При преобразовании в hex то же число записывается в системе с основанием 16, по две шестнадцатеричные цифры на байт, поэтому ничего не добавляется и не теряется.

Нулевые байты в начале данных не имеют числового значения, поэтому Base58 записывает каждый из них как ведущую 1 — первый символ своего алфавита. Декодер превращает каждую ведущую 1 обратно в байт 00. Например, 115Q декодируется в 0000ff, а адрес System Program в Solana — тридцать два символа 1 подряд — декодируется в 32 нулевых байта. Преобразование выполняется локально в вашем браузере.

Примеры для Bitcoin, Solana и IPFS

Чтобы показать составные части, в hex ниже добавлены пробелы:

Bitcoin address (P2PKH, genesis block)
1A1zP1eP5QGefi2DMPTfTL5SLmv7DivfNa
00 62e907b15cbf27d5425399ebf6f0fb50ebb88f18 c29b7d93
version | hash160 (20 bytes) | checksum (4 bytes)

Solana public key (SPL Token program)
TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA
06ddf6e1d765a193d9cbe146ceeb79ac1cb485ed5f5b37913a8cf5857eff00a9
32 bytes, no version byte, no checksum

IPFS CIDv0
QmYwAPJzv5CZsnA625s3Xf2nemtYgPpHdWEz79ojWnPbdG
12 20 9d6c2be50f706953479ab9df2ce3edca90b68053c00b3004b7f0accbe1e8eedf
sha2-256 | length 32 | digest

Устаревшие (legacy) адреса Bitcoin начинаются с 1, потому что их байт версии равен 00. Адреса P2SH начинаются с 3 и декодируются с версией 05.

Контрольная сумма Base58Check остаётся в байтах

Адреса Bitcoin и закрытые ключи WIF используют Base58Check: перед кодированием к полезной нагрузке добавляются четыре байта контрольной суммы, взятые из её двойного хеша SHA-256. На этой странице используется обычный Base58, поэтому контрольная сумма декодируется как любые другие данные и отображается в виде последних 8 шестнадцатеричных цифр. Hash160 устаревшего адреса — это 40 шестнадцатеричных цифр между ведущим 00 и контрольной суммой.

Чтобы убедиться, что адрес не повреждён, и получить полезную нагрузку без контрольной суммы, декодируйте его на странице Base58Check. Ключи Solana и хеши IPFS не содержат контрольной суммы, поэтому для них подходит обычный Base58.

Преобразование Base58 в hex в коде

# Python (pip install base58)
import base58
base58.b58decode('115Q').hex()      # '0000ff'

// JavaScript (npm install bs58)
import bs58 from 'bs58';
Buffer.from(bs58.decode('115Q')).toString('hex');   // '0000ff'

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

Почему адрес Bitcoin декодируется в 25 байт, а не в 20?

Устаревший адрес содержит 1 байт версии, 20-байтовый hash160 открытого ключа и 4-байтовую контрольную сумму. Обычный Base58 возвращает все три части, поэтому вы получаете 50 шестнадцатеричных цифр. Hash160 — это всё, что находится между первым байтом и последними четырьмя.

Почему каждая ведущая 1 превращается в 00?

В Base58 символ 1 обозначает значение ноль. Если рассматривать данные как обычное число, ведущие нулевые байты исчезли бы, поэтому каждый из них записывается как 1 и при декодировании снова становится байтом 00.

Почему появляется ошибка о недопустимом символе?
В алфавите Bitcoin нет символов 0, O, I и l, поэтому строка с ними не является Base58. Адреса Bitcoin, начинающиеся с bc1, используют Bech32 — это другая кодировка. Адреса Ripple (XRP) используют собственный алфавит Base58; декодируйте их на странице Base58, выбрав алфавит Ripple.
Какова длина открытого ключа Solana?

Ровно 32 байта, или 64 шестнадцатеричные цифры. В Base58 это обычно 43 или 44 символа. Ключи, начинающиеся с нулевых байтов, могут быть короче, как показывает адрес System Program.