Из любви к вычислениям: вы имели в виду 0 или O?

Мы все были в ситуации, когда не знали, есть ли у нас ноль («0») или «O». Так как же этого избежать? При кодировании непечатаемых символов в символы, пригодные для печати, мы часто используем Base-64, где мы берем по шесть бит за раз и конвертируем в символ Base-64.

Но как насчет похожих букв: 0 (ноль), O (заглавная o), I (заглавная i) и l (нижний регистр L) и не буквенно-цифровых символов + (плюс) и / (косая черта). Решением является Base-58, где мы удаляем похожие символы.

При преобразовании строки в Base-58 мы конвертируем символы ASCII в двоичные, продолжаем деление на 58 и преобразуем остаток в символ Base-58. Алфавит выглядит следующим образом (обратите внимание, что «0» (ноль), «O» (заглавная «o») и «I» (заглавная «i»):

‘123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz’

Итак, давайте возьмем пример «е». С «е» у нас есть десятичное значение 101, поэтому мы разделим на 58, чтобы получить:

1 остаток 43

а затем делим 1 на 58 и получаем:

0 остаток 1

Итак, мы берем символ в позиции 1 и позиции 43, чтобы дать:

12 3456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghij k mnopqrstuvwxyz

и преобразование будет таким:

‘2k’

Если мы теперь возьмем «ef», мы получим 25958 (102 + 101 * 256), где мы переместим каждый символ на один байт вверх. Обычно мы берем двоичное значение строки, затем делим на 58 и берем остаток. Итак, «ef» равно «01100101 01100110», и когда мы разделим, мы получим:

25959 деление на 58 дает: 447 r 32
447 деление на 58 дает: 7 r 41
7 деление на 58 дает: 0 r 7

это дает "8iZ"

Вот калькулятор:



Адреса Base-58 и Биткойн

Так где это используется? Ответ: В биткойн-адресе.

С биткойнами мы создаем 256-битный случайный ключ для закрытого ключа, а затем конвертируем его в формат ключа формата обмена кошельком (WiF), который является формой Base-58 для случайного ключа. Это формат, который хранится в биткойн-кошельке. Например, пример закрытого ключа:

Закрытый ключ: 5c04990cf2fb95ca8749d4021100ee98b0744e81a5ec00a2177aeaf4b29c00d3

Затем мы конвертируем это в формат WiF (Base-58), чтобы получить:

5JWp4FM7sfAAE88DW3yvGF5mQyrsEXeWzXZn79bg61Vg8YMfJjA

Его можно хранить в биткойн-кошельке. Затем мы можем взять закрытый ключ и хеш-значение и преобразовать его в пригодный для использования биткойн-адрес, например:

1A3CohNBuB6kFAMtp3KFEYwv3Eu58F2HyN

Формат ключей определен ниже, где мы создаем 256-битный закрытый ключ и преобразуем его в закрытый ключ WiF. Затем мы генерируем 512-битный открытый ключ, а затем берем 160-битный хэш RIPEM-160 и конвертируем в биткойн-адрес:

Вот пример:



Выводы

Крипта в биткойнах довольно странная и представляет собой набор методов, но никто не может сказать, что она не работает. Крипто-панки 1990-х годов увидели новый мир и построили его с помощью методов, которые существовали в то время, и построили одну из самых удивительных инфраструктур, которые когда-либо создавались.