Кодировщик и декодер Base58

Преобразуйте текст, шестнадцатеричные байты или небольшие файлы в Base58 и обратно. Выберите алфавит Bitcoin, Flickr или Ripple и при необходимости добавьте или проверьте контрольную сумму Base58Check.

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

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

  1. Выберите «Кодировать», чтобы превратить текст или байты в Base58, или «Декодировать», чтобы получить данные из строки Base58.
  2. Выберите нужный вариант в списке «Алфавит». По умолчанию выбран Bitcoin — этот же алфавит применяется в IPFS и Solana.
  3. Введите или вставьте исходные данные. Если у вас необработанные байты, например хеш или открытый ключ, переключите формат ввода на Hex.
  4. Включайте параметр «Контрольная сумма 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

АлфавитСимволы по порядку
Bitcoin123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz
Flickr123456789abcdefghijkmnopqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ
Ripplerpshnaf39wBUDNEGHJKLM4PQRST7VWXYZ2bcdeCg65jkm8oFqi1tuvAxyz

Все три алфавита содержат одни и те же 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.isr1Nm3AS7ZcnN
你好2xuZUfBKa

Часто задаваемые вопросы

Почему ведущие нулевые байты превращаются в 1?
Base58 преобразует входные данные в одно число, а ведущие нулевые байты не меняют его значения. Чтобы сохранить их, каждый ведущий нулевой байт записывается первым символом алфавита (в алфавите Bitcoin это 1). Поэтому 32 нулевых байта кодируются в последовательность из 32 единиц.
Учитывает ли Base58 регистр букв?

Да. Заглавные и строчные буквы обозначают разные цифры, поэтому изменение регистра хотя бы одного символа меняет декодированные байты или делает строку некорректной.

Чем Base58 отличается от Base58Check?
Base58Check перед кодированием добавляет 4-байтовую контрольную сумму (начало двойного хеша SHA-256), что позволяет обнаружить опечатки. Включите здесь параметр «Контрольная сумма Base58Check» или прочитайте подробности на странице Base58Check.
Почему объём входных данных ограничен примерно 20 КБ?
Все входные данные обрабатываются как одно большое число, поэтому объём вычислений растёт пропорционально квадрату их длины. Base58 предназначен для ключей, хешей и адресов, а не для файлов. Для больших объёмов данных используйте Base64 или Base85.