Как пользоваться
- Вставьте строку Base58 в поле ввода. Пробелы и переносы строк игнорируются.
- Декодированные байты в шестнадцатеричном виде появятся в поле вывода.
- Скопируйте 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.
Почему появляется ошибка о недопустимом символе?
Какова длина открытого ключа Solana?
Ровно 32 байта, или 64 шестнадцатеричные цифры. В Base58 это обычно 43 или 44 символа. Ключи, начинающиеся с нулевых байтов, могут быть короче, как показывает адрес System Program.