Как пользоваться
- Выберите «Кодировать», чтобы получить строку Base58Check, или «Декодировать», чтобы проверить строку и восстановить её байты.
- Для кодирования переключите формат ввода на Hex и введите байт версии, а за ним полезную нагрузку, например 00 и 20-байтовый HASH160.
- Оставьте параметр «Контрольная сумма Base58Check» включённым. При кодировании контрольная сумма добавляется, а при декодировании проверяется.
- Для декодирования вставьте строку и выберите формат вывода Hex. Вы получите байт версии и полезную нагрузку без контрольной суммы.
Как работает Base58Check
- Сначала идёт байт версии, указывающий тип данных, а за ним полезная нагрузка, например 20-байтовый хеш открытого ключа.
- Эти байты хешируются с помощью SHA-256, результат ещё раз хешируется SHA-256, и первые 4 байта берутся в качестве контрольной суммы.
- Контрольная сумма добавляется в конец, и всё вместе кодируется в Base58. Каждый ведущий байт
0x00превращается в1.
Этот инструмент вычисляет контрольную сумму ровно по тем байтам, которые вы ввели. Байт версии он не добавляет, поэтому укажите его в начале входных данных. При декодировании контрольная сумма заново вычисляется по всем байтам, кроме последних 4. Если они совпадают, вы получаете байт версии и полезную нагрузку, если нет — ошибку контрольной суммы. Случайная опечатка остаётся незамеченной лишь примерно в одном случае из четырёх миллиардов.
Распространённые байты версии
| Байт версии | Данные | Начало закодированной строки |
|---|---|---|
0x00 | Адрес Bitcoin P2PKH (20-байтовый HASH160) | 1 |
0x05 | Адрес Bitcoin P2SH (20-байтовый хеш скрипта) | 3 |
0x6F | Адрес P2PKH в тестовой сети Bitcoin | m или 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.is | 6XgW4KVJr8DBmZEAeJ |
你好 | DrMzxHL43oWHbW |
Часто задаваемые вопросы
Почему при декодировании возникает ошибка контрольной суммы?
Добавляет ли инструмент байт версии сам?
00 для адреса Bitcoin.Можно ли декодировать закрытый ключ WIF?
80, 32-байтовый ключ и, для сжатых ключей, завершающий байт 01. Декодирование выполняется локально в браузере, но с настоящими закрытыми ключами всё равно обращайтесь осторожно.Можно ли декодировать адреса bc1?
Нет. Нативные адреса SegWit и Taproot используют Bech32 или Bech32m — другую кодировку со своей контрольной суммой. В Bitcoin Base58Check применяется только для устаревших адресов, начинающихся с 1 или 3 (m, n или 2 в тестовой сети).