WIF 的私鑰
根據以下連結: https : //en.bitcoin.it/wiki/Wallet_import_format,256 位的私鑰被轉換為儲存在錢包中的 WIF 地址。
但是,我的問題是我們如何將步驟 6 轉換為步驟 7?在第 6 步中,地址由 74 個十六進製字元(或 74*4=296 位)組成。如果我們使用 code58 轉換這個 296 位地址,我們需要將 296 位除以 6.. ? 我相信有些細節沒有提到,有什麼想法嗎?
StephenM347 的回答非常好,但是有一個小細節他弄錯了。我會將其發佈為對他的回答的評論,但我沒有足夠的聲譽。
斯蒂芬說:
例如,沒有 O 字元,因為已經有一個 0(零)字元,這兩者很容易混淆。
維基說:
一組 58 個字母數字元號,由易於區分的大小寫字母組成(不使用 0OIl)
使用小寫“o”,但大寫“O”和數字“0”都從基數 58 中排除。
您基本上想知道 Base58 編碼是如何工作的。該站點提供了一個很好的概述,但我將在此處列出詳細資訊以及更具體的範例。對於這個例子,我將只討論編碼,但版本字節(前置)和校驗和字節(附加)在編碼完成之前會被添加。這種前置/附加只是在編碼之前更改基本數據。以下是數據的編碼方式。
假設我有一個稱為 Base4 編碼的簡單編碼。在我的編碼中:
0->A 1->B 2->C 3->D
如果我有數字 134(1000 0110 或 0x86)並且我想在 Base4 中對其進行編碼,那麼我所做的就是反复除以 4 並使用編碼。像這樣:
134 / 4 = 33 餘數 2 -> C / ------- | 33 / 4 = 8 餘數 1 -> B / ------- | 8 / 4 = 2 餘數 0 -> A / ------- | 2 / 4 = 0 餘數 2 -> C
所以這個字節的 Base4 編碼將是“CABC”。比特幣做同樣的事情,但使用 58 個數字而不是 4 個數字,並且每個數字都有不同的字元。Base58 編碼中選擇的字元只是為了避免在人類轉置密鑰時產生混淆。例如,沒有 I 字元,因為已經有一個 1 字元,這兩個字元很容易混淆。
還有一件事有點棘手。如果我對數據 0x0086 進行編碼,我可能希望編碼與上述 0x86 的編碼稍有不同,以表明我在開頭有一個額外的 0x00 字節。為此,您只需在編碼的左側添加額外的數據。因此,在我們的 Base4 中,0x0086 被編碼為 ACABC。類似地,0x0000 0086 被編碼為 AAACABC。在標準比特幣地址中,版本字節前綴為 0x00,0x00 編碼為 1,因此地址總是以 1 開頭。