Как пользоваться
- Выберите «Кодировать», чтобы превратить текст или байты в Base58, или «Декодировать», чтобы получить данные из строки Base58.
- Выберите нужный вариант в списке «Алфавит». По умолчанию выбран Bitcoin — этот же алфавит применяется в IPFS и Solana.
- Введите или вставьте исходные данные. Если у вас необработанные байты, например хеш или открытый ключ, переключите формат ввода на Hex.
- Включайте параметр «Контрольная сумма Base58Check» только в том случае, если строка содержит 4-байтовую контрольную сумму, затем скопируйте или скачайте результат.
Что такое Base58?
Base58 — это способ представления двоичных данных в виде текста, созданный для Bitcoin. Его алфавит — это набор из 62 цифр и латинских букв, из которого исключены четыре легко путаемых символа: 0 (ноль), O (заглавная o), I (заглавная i) и l (строчная L). В нём также нет символов +, / и =, поэтому строку Base58 можно выделить двойным щелчком и вставить в URL без экранирования.
В отличие от Base64, Base58 не делит входные данные на группы битов. Все данные рассматриваются как одно большое число, которое записывается в системе счисления с основанием 58, поэтому дополнение не нужно, а изменение одного байта может затронуть много символов результата. Ведущие нулевые байты не влияют на значение числа, поэтому каждый из них записывается первым символом алфавита (1 в алфавите Bitcoin), чтобы не потерять его. Результат примерно в 1,37 раза больше исходных данных.
Где используется Base58
- Bitcoin. Устаревшие (legacy) адреса и закрытые ключи WIF записываются в Base58Check — это Base58 с байтом версии и контрольной суммой.
- IPFS. Идентификатор содержимого версии 0 (CIDv0) — это мультихеш SHA-256 в форме Base58, поэтому такие CID имеют длину 46 символов и начинаются с
Qm. - Solana. Открытые ключи, адреса аккаунтов и подписи транзакций записываются в обычном Base58 без контрольной суммы. Ключ длиной 32 байта обычно превращается в 43 или 44 символа.
- Flickr и XRP Ledger. Короткие ссылки Flickr используют алфавит Flickr, а адреса XRP — алфавит Ripple, поэтому они начинаются с
r.
Для преобразования между Base58 и необработанными байтами воспользуйтесь инструментами Base58 в Hex и Hex в Base58. Если идентификатор должен состоять только из букв и цифр, сравните с Base62.
Алфавиты Base58
| Алфавит | Символы по порядку |
|---|---|
| Bitcoin | 123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz |
| Flickr | 123456789abcdefghijkmnopqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ |
| Ripple | rpshnaf39wBUDNEGHJKLM4PQRST7VWXYZ2bcdeCg65jkm8oFqi1tuvAxyz |
Все три алфавита содержат одни и те же 58 символов, но в разном порядке, поэтому строка, закодированная с одним алфавитом, при декодировании с другим даст другие байты или вызовет ошибку.
Base58 в коде
# Python (pip install base58)
import base58
base58.b58encode(b'hello') # b'Cn8eVZg'
base58.b58decode('Cn8eVZg') # b'hello'
// JavaScript (npm install bs58)
import bs58 from 'bs58';
bs58.encode(new TextEncoder().encode('hello'));
Спецификация
| Алфавит | 1-9 A-Z a-z без 0 O I l |
|---|---|
| Размер результата | Около 137% (перевод большого числа) |
| Дополнение | Нет (ведущие нулевые байты становятся символом 1) |
| Стандарт | Bitcoin Base58 |
| Учёт регистра | Да |
Примеры
| Исходные данные (UTF-8) | Результат |
|---|---|
Hello, World! | 72k1xXWG59fYdzSNoA |
Base64.is | r1Nm3AS7ZcnN |
你好 | 2xuZUfBKa |
Часто задаваемые вопросы
Почему ведущие нулевые байты превращаются в 1?
1). Поэтому 32 нулевых байта кодируются в последовательность из 32 единиц.Учитывает ли Base58 регистр букв?
Да. Заглавные и строчные буквы обозначают разные цифры, поэтому изменение регистра хотя бы одного символа меняет декодированные байты или делает строку некорректной.