Base58

使用 Base58Check 編碼將字節字元串轉換為 base58 字元串

  • September 29, 2017

我正在嘗試了解將私鑰轉換為 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 開頭。

引用自:https://bitcoin.stackexchange.com/questions/60090