Client

默克爾樹雜湊

  • November 24, 2020

我正在嘗試實現我自己的 Markle 樹,目前我正在努力正確完成散列。

我使用了一些來自http://blockexplorer.com/rawblock/000000000000a85d42610b292d2baebe54ff0c854847fe3d2ca37ac7d6e46b99的雜湊值

範例輸入(來自 blockexplorer 的前兩個雜湊):

伊娜:3a459eab5f0cf8394a21e04d2ed3b2beeaa59795912e20b9c680e9db74dfb18c

入庫:be38f46f0eccba72416aed715851fd07b881ffb7928b7622847314588e06a6b7

串聯字元串(H1+H2):3a459eab5f0cf8394a21e04d2ed3b2beeaa59795912e20b9c680e9db74dfb18cbe38f46f0eccba72416aed715851fd07b881ffb7928b7622847314588e066a

連接字元串的雜湊:Ans v1:b5916d6bc34bd4157aa73c3d799a6cfcef85e0659465734362d0cebb8901e93d

連接字元串的最終雜湊:Ans v2:215f8397a3090a0bc8f4a2e98609a10d55fc7b939fa1ecf9803df20b1ee089a2

結果我得到:215f8397a3090a0bc8f4a2e98609a10d55fc7b939fa1ecf9803df20b1ee089a2

預期結果:13a3595f2610c8e4d727130daade66c772fdec4bd2463d773fd0f85c20ced32d

使用http://www.fileformat.info/tool/hash.htm?hex=b5916d6bc34bd4157aa73c3d799a6cfcef85e0659465734362d0cebb8901e93d “手動”檢查了我的計算 並得到了相同的結果。

按照這個例子,我做錯了嗎:https ://en.bitcoin.it/wiki/Protocol_specification#Merkle_Trees 。我將輸入的雜湊值連接在一起,然後將該字元串加倍 SHA256。我也試過把輸入的字元串當作a和b,也就是先把它們加倍SHA256,然後才把它們連接在一起,但結果也是錯誤的。有人有正確散列默克爾樹的分步範例嗎?

正如 ArtForz 在這篇文章中向我指出的那樣:https ://bitcointalk.org/index.php?topic=44707.msg534605#msg534605雜湊以小端符號儲存,所以我首先需要在 double 之前反轉它們- 對它們進行散列,然後將輸出反向以獲得正確的結果。

加了兩分錢。在 Excel VBA 中

Private Function Sha256String(ByVal a)
b = a
While Len(b) > 0
c = c + Right(b, 2)
b = Left(b, Len(b) - 2)
Wend
Sha256String = c
End Function

在 a 和 b 雜湊上執行它,將它們連接起來,將雜湊加倍為十六進製字節: http ://www.fileformat.info/tool 然後在 sha-256 答案上執行該函式。

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