Hash
您如何執行雙 SHA-256 編碼?
比特幣協議規範給出了雙 SHA-256 編碼的範例。
你好
2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824(第一輪 sha-256)
9595c9df90075148eb06860365df33584b75bff782a510c6cd4883a41(第二輪)
我嘗試了各種 SHA256計算器,第一個編碼匹配沒有問題,但第二個總是解決
d7914fe546b684688bb95f4f888a92dfc680603a75f23eb823658031fff766d9
我也嘗試過大寫並交換字節字節序。
您正在散列第一個散列的十六進製表示。您需要散列實際的散列 - 十六進製表示的二進制數據。
嘗試這個:
$ echo -n hello |openssl dgst -sha256 -binary |openssl dgst -sha256
您想使用摘要,而不是十六進製字元串。
這是一些紅寶石:
require 'digest' d = Digest::SHA2.new 256 d2 = Digest::SHA2.new 256 d << 'hello' d.to_s d2 << d.digest d2.to_s
這將是來自的輸出
irb
:1.9.3p194 :001 > require 'digest' => true 1.9.3p194 :003 > d = Digest::SHA2.new 256 => #<Digest::SHA2:256 e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855> 1.9.3p194 :004 > d2 = Digest::SHA2.new 256 => #<Digest::SHA2:256 e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855> 1.9.3p194 :005 > d << 'hello' => #<Digest::SHA2:256 2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824> 1.9.3p194 :006 > d.to_s => "2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824" 1.9.3p194 :007 > d2 << d.digest => #<Digest::SHA2:256 9595c9df90075148eb06860365df33584b75bff782a510c6cd4883a419833d50> 1.9.3p194 :008 > d2.to_s => "9595c9df90075148eb06860365df33584b75bff782a510c6cd4883a419833d50"
在 Python 中也是這樣:
import hashlib d = hashlib.sha256(b"hello") d2 = hashlib.sha256() d.hexdigest() d2.update(d.digest()) d2.hexdigest()
以及 Python shell 中的輸出:
>>> d = hashlib.sha256(b"hello") >>> d2 = hashlib.sha256() >>> d.hexdigest() '2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824' >>> d2.update(d.digest()) >>> d2.hexdigest() '9595c9df90075148eb06860365df33584b75bff782a510c6cd4883a419833d50'