您如何對數據進行雜湊處理以進行探勘?
我正在檢查塊散列算法,並嘗試用我的 c++ sha256 散列一些塊以檢查結果。
雜湊一直是錯誤的,所以我認為我無法正確建構塊頭,但後來我從 wiki <https://en.bitcoin.it/wiki/Block_hashing_algorithm>獲取數據並將範例中的值和結果連接起來仍然是錯誤的(我也在線上 sha-256 計算器中嘗試過,所以功能還可以)。
當然,我一定會遺漏一些類似編碼的東西,但如果我理解正確的話,sha 是一個函式,你可以在其中發送消息,它會獲取消息的 ascii 程式碼並對這些程式碼進行數學運算。但是如何將塊頭作為字元串傳遞?還是我必須找到一個以不同方式解釋輸入的 sha 實現?
對不起,我知道這是一個菜鳥問題,但這對我來說似乎並不那麼明顯。
編輯:
程式碼非常複雜,但我現在擁有的基本上是一個組成的塊頭,我將它打包在一個字元串中,對於我上面提到的 wiki 頁面中的範例,字元串看起來像
0100000081cd02ab7e569e8bcd9317e2fe99f2de44d49ab2b8851ba4a308000000000000e320b6c2 fffc8d750423db8b1eb942ae710e951ed797f7affc8892b0f1fc122bc7f5d74df2b9441a42a14695
我還有一個 sha 函式,它接受一個字元串作為輸入,所以雜湊應該是
1dbd981fe6985776b644b173a4d0385ddc1aa2a829688d1e0000000000000000
但它是
cf5397ae292d5d37a0df81aa7f89f9fc7e1c43329e441ce2294f0a72e542c7d9
我還在<http://www.xorbin.com/tools/sha256-hash-calculator>上檢查了它,所以我認為程式碼沒問題,但我必須在這裡遺漏一些東西。
sha 是一個函式,您可以在其中提供消息,它採用消息的 ascii 程式碼並對這些程式碼進行數學運算。
錯誤的。sha256 是一個雜湊函式。這意味著它獲取(公平地說,可以有粒度)任意長度的數據並返回恆定長度的數據。在 sha256 的情況下,粒度是 1 位(儘管它的大多數實現的粒度是 1 字節;謝謝,dave_thompson_085),它返回的數據始終是 256 位 = 32 字節。無需 ASCII 編碼。
你給你的散列函式提供了錯誤的數據。你給它一個字元串,其中包含你應該輸入函式的數據的 ASCII 編碼的十六進製表示。
如果您有一個以 ASCII 編碼的十六進製表示,您首先必須將其轉換為它表示的數據,然後將其輸入散列函式。
從Andrew Chow那裡得到了很多幫助..
希望這可以幫助您或其他任何人。
乾杯!!!