Как пользоваться
- Вставьте байты hex в поле ввода. Допускаются пробелы, двоеточия и префикс 0x.
- Результат в Base58 появится в поле вывода.
- Скопируйте его или нажмите кнопку «Поменять ввод и вывод местами», чтобы декодировать Base58 обратно в hex.
Как hex превращается в Base58
Сначала шестнадцатеричные цифры превращаются в байты, по две цифры на байт, поэтому число цифр во входных данных должно быть чётным. Затем байты читаются как одно число в порядке big-endian и переписываются в системе с основанием 58 алфавитом Bitcoin. Каждый ведущий байт 00 записывается как 1, поэтому 0000ff превращается в 115Q, а ff сам по себе — в 5Q.
Base58 требует около 1,37 символа на байт, поэтому 64 шестнадцатеричные цифры (32 байта) сокращаются до 43 или 44 символов. В алфавите нет 0, O, I, l, + и /, поэтому результат легко прочитать вслух, выделить двойным щелчком и вставить в URL. Все вычисления выполняются в вашем браузере.
Создание идентификаторов Solana и IPFS
- Solana: адрес — это 32-байтовый открытый ключ Ed25519 в Base58 без префикса и без контрольной суммы. Вставьте 64-значный ключ в hex, чтобы получить адрес.
- IPFS CIDv0: CIDv0 — это мультихеш sha2-256 в Base58. Добавьте
1220перед 64-значным дайджестом, и получится 46-символьная строка, начинающаяся сQm. Дайджест должен быть тем, который IPFS вычислил для закодированного блока, а он не совпадает с SHA-256 исходного файла.
1220 9d6c2be50f706953479ab9df2ce3edca90b68053c00b3004b7f0accbe1e8eedf
QmYwAPJzv5CZsnA625s3Xf2nemtYgPpHdWEz79ojWnPbdG
Адресам Bitcoin нужна контрольная сумма
Сам по себе hash160 — ещё не адрес. Устаревший адрес Bitcoin — это Base58Check от байта версии 00, за которым следует 20-байтовый hash160; при этом перед кодированием добавляется 4-байтовая контрольная сумма на основе двойного SHA-256. Если закодировать 00 и hash160 обычным Base58, получится более короткая строка без контрольной суммы, и кошельки её отклонят.
Вместо этого воспользуйтесь страницей Base58Check: переключите «Формат ввода» на Hex, введите 00, а за ним hash160, и контрольная сумма будет добавлена автоматически. Если ваш hex уже заканчивается правильной контрольной суммой, эта страница выдаст тот же адрес.
0062e907b15cbf27d5425399ebf6f0fb50ebb88f18 (Base58Check)
1A1zP1eP5QGefi2DMPTfTL5SLmv7DivfNa
Преобразование hex в Base58 в коде
# Python (pip install base58)
import base58
base58.b58encode(bytes.fromhex('0000ff')) # b'115Q'
// JavaScript (npm install bs58)
import bs58 from 'bs58';
bs58.encode(Buffer.from('0000ff', 'hex')); // '115Q'
Часто задаваемые вопросы
Как превратить hash160 в адрес Bitcoin?
Почему результат начинается с нескольких символов 1?
Ваш hex начинается с такого же количества байтов 00. Base58 сохраняет их в виде ведущих единиц, чтобы при декодировании строки они были восстановлены.
Почему мои данные в hex не принимаются?
Для hex нужно чётное число цифр и только символы 0-9 и a-f в верхнем или нижнем регистре. Пробелы, двоеточия и префикс 0x удаляются автоматически; всё остальное, например случайная буква g или пропущенная цифра, считается ошибкой.