使用 Base58Check 編碼將字節字元串轉換為 base58 字元串
我正在嘗試了解將私鑰轉換為 WIF(錢包導入格式)的過程的每一點。
我一直按照此頁面上的步驟進行操作,並一直到最後一步(第 7 步 - “使用 Base58Check 編碼將結果從字節字元串轉換為 base58 字元串”),這就是我被卡住的地方。
我需要使用這個過程:
code_string = "123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz" x = convert_bytes_to_big_integer(hash_result) output_string = "" while(x > 0) { (x, remainder) = divide(x, 58) output_string.append(code_string[remainder]) } repeat(number_of_leading_zero_bytes_in_hash) { output_string.append(code_string[0]); } output_string.reverse();
該過程來自比特幣維基。
我很確定我已經設法破譯了除了這部分之外的所有內容:
x = convert_bytes_to_big_integer(hash_result)
看起來它告訴我將散列結果的字節轉換為“大整數”,但我不確定它指的是什麼散列結果(我想可能是這個?:)
800C28FCA386C7A227600B2FE50B7CAE11EC86D3BF1FBE471BE89827E19D72AA1D507A5B8D
而且我不知道如何將其字節轉換為“大整數”(請記住,我正在努力學習,因此需要自己完成所有數學運算,而不是簡單地讓現有的程式命令或網路工具為我完成)。在較小程度上,這部分:
repeat(number_of_leading_zero_bytes_in_hash)
我不確定它指的是什麼“雜湊”。
我花了很多時間試圖弄清楚這一切,並進行了大量搜尋並嘗試了許多可能的解釋,所以請不要以為我只是在找人為我做這項工作。
謝謝你。
我想也許這個?:
800C28FCA386C7A227600B2FE50B7CAE11EC86D3BF1FBE471BE89827E19D72AA1D507A5B8D
是的!
而且我不知道如何將其字節轉換為“大整數”(請記住,我正在努力學習,因此需要自己完成所有數學運算,而不是簡單地使用現有的程式命令或網路工具對我來說)。
首先,您需要將其轉換為整數。讓我給你一個簡單的例子,你可以用它來測試你的程序:
hex = fb4d9a dec = 16469402
你如何從十六進制中得到一個整數?這就像讀取一個以 10 為基數的數字,只是它是以 16 為基數的。
hex = fb4d9a ^ one's column ^ 16's column ^ 256's column (16*16) ^ etc.
一旦你弄清楚了,升級你的程序來處理“大整數”。一些程式語言對它們可以處理的數字有多大限制。在 C 中,您不能將 50 億放入
int
類型變數中。一些語言,比如 Python,可以在沒有任何幫助的情況下處理大整數。您為引用的雜湊獲得的數字應該是
63680997318088143281752740767766707563546963464218564507450892460763521488675430192536461
.我不確定它指的是什麼“雜湊”。
就是你剛才提到的那個。在這種情況下,前導零為零,這意味著輸出地址不應以 1 開頭。