ELI5:什麼是 Base58Check 編碼?
我已經看過關於如何做的文章,並且我已經閱讀了關於它是什麼的 wiki ,但是這些解釋太複雜了。有人可以解釋它是什麼以及為什麼它被稱為 Base58Check 編碼嗎?不經過這些步驟而生成的地址在比特幣中仍然有效嗎?
這是base58.h中原始bitcoind客戶端提供的解釋
// Why base-58 instead of standard base-64 encoding? // - Don't want 0OIl characters that look the same in some fonts and // could be used to create visually identical looking account numbers. // - A string with non-alphanumeric characters is not as easily accepted as an account number. // - E-mail usually won't line-break if there's no punctuation to break at. // - Doubleclicking selects the whole number as one word if it's all alphanumeric.
為了進一步解決這個問題,像bs58check這樣的 npm 包究竟做了什麼?描述是這樣的
在 bs58 上擴展的 base58check 的直接實現。
有人可以解釋它是什麼以及為什麼它被稱為 Base58Check 編碼嗎?
“Base58Check”這個名稱有兩個部分。第一部分是“ Base58 ”。這是相當不言自明的,編碼使用 Base 58。這意味著有 58 個數字由 58 個字元表示。一個數字是 0 到 57 之間的數字,就像十進制系統(或以 10 為底)中的數字一樣,它是 0 到 9 之間的數字。由於每個數字都應該是一個字元,因此我們需要有一個不同的“每個數字的字母“。對於基數 58,我們使用字母表
123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz
,其中數字 0 由字元1
表示,數字 57 由字元 表示z
。為了比較,十進製字母表是0123456789
用字元表示的數字00
和字元表示的數字99
。名稱的第二部分是“檢查”。這指的是校驗和。計算出我們要編碼的數據的 SHA256 雙精度,並將該雜湊的前四個字節用作校驗和。這是一種錯誤檢測方法,有助於確保我們收到的數據正確且未損壞。在我們執行基本轉換以生成基本 58 字元串之前,這四個字節被附加到我們正在編碼的數據中。
與電腦中的任何數據一樣,整個 pre-base58 字節字元串可以解釋為一個非常大的整數。從那裡,很容易執行到 base 58 的基本轉換,從而生成最終的 base 58 字元串。
不經過這些步驟而生成的地址在比特幣中仍然有效嗎?
不經過這些步驟就無法生成地址,因此不可能不經過這些步驟來生成地址。
為了進一步解決這個問題,像 bs58check 這樣的 npm 包究竟做了什麼?描述是這樣的
它們實現了從字節到 Base58Check 編碼字元串的整個轉換。