tools / base58
base58/
Перевод текста или hex в Base58 и обратно с алфавитом Bitcoin. Каждый ведущий байт 00 превращается в ведущую 1.
Исходный текст
Base58
Частые вопросы
Почему в Base58 нет символов 0, O, I и l и что делать, если при декодировании пишет, что символ не входит в алфавит
В Base58 намеренно убраны цифра 0, заглавная O, заглавная I и строчная l: при чтении глазами или переписывании от руки их легко спутать. Остается 58 символов: цифры от 1 до 9, заглавные буквы от A до Z (без I и O) и строчные от a до z (без l). Если при декодировании встречается символ вне алфавита, инструмент указывает, какой это символ и где он стоит. Проверьте, не попали ли при копировании кавычки, знаки препинания или невидимые символы; пробелы и переводы строк игнорируются автоматически. Если в строке действительно есть 0, O, I или l, скорее всего, это не Base58, а Base64, hex или другая кодировка.
Что делать, если после декодирования Base58 пишет, что результат не является допустимым текстом UTF-8
Это значит, что декодированные байты не являются текстом UTF-8. Закрытые ключи, хеши открытых ключей и адреса изначально представляют собой двоичные данные. Переключите «Формат вывода» на hex, чтобы увидеть исходные байты. Текст всегда обрабатывается как UTF-8, поэтому байты в GBK или другой кодировке здесь нельзя показать как текст; воспользуйтесь инструментом с поддержкой этой кодировки.
Что означает ведущая 1 в результате Base58 и почему ведущий 00 в hex превращается в 1
Base58 рассматривает всю строку байтов как одно большое целое число и переводит его в другую систему счисления, поэтому ведущие байты 00 пропали бы: на значение они не влияют. По соглашению каждый ведущий байт 00 записывается как одна ведущая 1 (первый символ алфавита). Например, hex 0000010203 превращается в 11Ldp, и две ведущие 1 обозначают два байта 00. При декодировании каждая ведущая 1 снова становится байтом 00; ввод, состоящий только из байтов 00, дает просто строку из единиц.
Можно ли декодировать адреса Bitcoin и что с контрольной суммой Base58Check
Байты декодируются, но ничего не проверяется. Адреса Bitcoin используют Base58Check: байт версии, данные и 4-байтовая контрольная сумма соединяются вместе и затем кодируются в Base58. Этот инструмент выполняет только обычный Base58: при декодировании вы получаете все исходные байты, контрольная сумма не проверяется и не отбрасывается, а при кодировании не добавляется. Например, 1A1zP1eP5QGefi2DMPTfTL5SLmv7DivfNa при декодировании (вывод hex) дает 25 байт: 1 байт версии 00, 20 байт хеша и 4 байта контрольной суммы в конце.
Чем Base58 отличается от Base64
Base64 использует 64 символа (включая + и /, в конце возможен знак =) и преобразует данные группами по 3 байта, поэтому работает быстро, а длина результата предсказуема. В Base58 нет похожих друг на друга символов, а также +, / и =, поэтому строка выделяется двойным щелчком целиком, а при ручном переписывании реже допускаются ошибки. Цена за это — деление одного большого целого числа: чем длиннее ввод, тем медленнее работа. Поэтому Base58 применяют в основном для коротких данных вроде адресов и ключей длиной в несколько десятков байт. Результаты двух кодировок не взаимозаменяемы.
Почему результат отличается от другого сайта или библиотеки
Проверьте три вещи. Алфавит: здесь используется алфавит Bitcoin; в алфавите Flickr строчные буквы идут первыми, а у Ripple порядок снова другой, поэтому результаты различаются. Ввод: текст кодируется в UTF-8 ровно в том виде, в каком введен, поэтому один лишний перевод строки или пробел в конце меняет результат. Формат ввода: если вы кодируете байты в hex, выберите hex, иначе 0a1b будет воспринято как текст из четырех символов. Во вводе hex допускаются разделители — пробелы, двоеточия, запятые — или префиксы 0x, а число цифр должно быть четным.
Есть ли ограничение на длину ввода для Base58
Да. При кодировании принимается до 32768 байт, при декодировании — до 45000 символов; более длинный ввод нужно разбить на части. Объем вычислений в Base58 растет пропорционально квадрату длины, и предел нужен, чтобы страница не зависала. Несколько КБ и меньше обрабатываются практически мгновенно.
Отправляется ли введенный текст на сервер
Нет. Кодирование и декодирование выполняются в браузере, на сервер ничего не отправляется.