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

Шаг 1 / 333%

Вход


            

Base58 кодирует двоичные данные в текст и исключает несколько символов, которые легко перепутать. В алфавите Bitcoin нет 0 O I l и + /, а другие системы располагают те же 58 символов в другом порядке. Известные примеры применения: старые адреса Bitcoin с Base58Check и строки IPFS CIDv0. Этот инструмент работает только в браузере, преобразует текст UTF-8 или точные шестнадцатеричные байты с алфавитом Bitcoin, Ripple либо Flickr и отклоняет символы, которых нет в выбранном алфавите.

Как кодировать и декодировать Base58

  1. 1

    Введите байты или строку Base58

    В режиме кодирования принимаются шестнадцатеричные данные или обычный текст; в режиме декодирования: Base58.

  2. 2

    При необходимости выберите алфавит

    По умолчанию используется Base58 от Bitcoin; для совместимости доступны варианты Ripple и Flickr.

  3. 3

    Запустите преобразование

    Base58 не разбивается на аккуратные группы по 5 или 6 бит; всё значение рассматривается как одно целое число с прямым порядком байтов и многократно делится на 58.

  4. 4

    Скопируйте результат

    Закодированные строки сохраняют ведущие нулевые байты как ведущие символы `1` (символ нуля в алфавите Bitcoin).

Алфавит Base58 от Bitcoin

123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz

Обратите внимание, чего нет: 0, O, I, l. Первый символ алфавита, 1, он представляет целое число 0.

Как это работает на самом деле

В отличие от Base64, который нарезает биты фиксированными группами, Base58 рассматривает всю строку байтов как одно целое число с прямым порядком байтов N и выражает его в системе с основанием 58:

result = []
while N > 0:
    result.prepend(alphabet[N mod 58])
    N = N / 58
for each leading zero byte in input:
    result.prepend(alphabet[0])  # i.e. '1'

Именно поэтому кодирование Base58 трудно выполнять потоково: прежде чем вывести хотя бы один символ, нужно всё число целиком.

Base58 и Base58Check

Типичная полезная нагрузка Base58Check старого адреса P2PKH занимает 25 байт: 1 байт версии, 20 байт хеша и 4 байта контрольной суммы. Контрольная сумма равна первым 4 байтам двойного SHA-256 от версии и хеша. После кодирования всей нагрузки в Base58 получается знакомая строка адреса.

Инструмент преобразует только обычный Base58. Для проверки версии и контрольной суммы адреса используйте отдельный валидатор Base58Check.

Варианты алфавита

Вариант Где используется Отличия от Bitcoin
Bitcoin Адреса BTC, IPFS CIDv0 Базовый
Ripple Адреса XRP Переставлены позиции символов
Flickr Короткие URL фотографий Строчные буквы перед прописными

Почему не просто Base64?

Base64 использует 4 кодированных символа на каждые 3 входных байта до добавления заполнения, поэтому увеличение длины фиксированное и достаточно небольшое. У Base58 накладные расходы немного меняются, зато исключены несколько неоднозначных символов, что удобно при ручном копировании или чтении идентификатора вслух.

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

Не всегда. Base58 лучше, когда со строкой работает человек; Base64 лучше, когда её пересылают машины. Base64 кодирует 6 бит на символ против примерно 5,86 у Base58, поэтому Base64 немного компактнее.

Base58 кодирует большое целое число, поэтому длина меняется на один-два символа в зависимости от старших битов. Типичные адреса P2PKH имеют 34 символа, но возможно и 33.

Инструмент может декодировать строку в сырые байты. Выберите шестнадцатеричный вывод, чтобы без потерь показать любые байты. Версия и контрольная сумма не проверяются, поэтому успешное декодирование не доказывает корректность адреса. Для проверки нужен валидатор Base58Check.

Да. Каждый нулевой байт в начале входных данных становится символом 1 в результате, именно так работают адреса Bitcoin, начинающиеся с 1.

Сопутствующие инструменты

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

Кодируйте и декодируйте Base85 в вариантах Adobe Ascii85 (PostScript/PDF) или Z85 (ZeroMQ). Компактнее Base64 для двоичных данных.

Генератор bcrypt

Сгенерируйте bcrypt hash из plaintext password. Настраиваемый cost factor от 4 до 14, совместим с Laravel, Django, Node и PHP.

Кодировщик шифра A1Z26

Кодируйте текст шифром A1Z26 (A=1, B=2, ... Z=26) или декодируйте числовую последовательность обратно в буквы, выбрав разделитель.

Генератор bcrypt-хешей

Генерируйте bcrypt-хеши или проверяйте пароль в открытом виде относительно существующего bcrypt-хеша. Генерация и проверка рядом в одном инструменте.

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

Кодируйте и декодируйте строки Base32 с алфавитом RFC 4648. Полезно для секретов TOTP, регистронезависимых токенов и идентификаторов, которые вводит человек.

Кодировщик шифра Атбаш

Кодируйте или декодируйте текст шифром Атбаш, еврейской заменой, где A-Z отображается в Z-A. Одна и та же операция шифрует и расшифровывает.