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

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

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

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

  1. Вставьте байты hex в поле ввода. Допускаются пробелы, двоеточия и префикс 0x.
  2. Результат в Base58 появится в поле вывода.
  3. Скопируйте его или нажмите кнопку «Поменять ввод и вывод местами», чтобы декодировать 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?
Добавьте перед ним байт версии 00 и закодируйте результат в Base58Check, а не в обычный Base58. Страница Base58Check сделает это, если ввести байты в hex.
Почему результат начинается с нескольких символов 1?

Ваш hex начинается с такого же количества байтов 00. Base58 сохраняет их в виде ведущих единиц, чтобы при декодировании строки они были восстановлены.

Почему мои данные в hex не принимаются?

Для hex нужно чётное число цифр и только символы 0-9 и a-f в верхнем или нижнем регистре. Пробелы, двоеточия и префикс 0x удаляются автоматически; всё остальное, например случайная буква g или пропущенная цифра, считается ошибкой.

Какой алфавит Base58 используется на этой странице?
Алфавит Bitcoin, который также используют Solana, IPFS и большинство других проектов. Для алфавита Flickr или Ripple перейдите на страницу Base58, выберите там нужный алфавит и введите данные в виде байтов hex.