Python 比特币区块的sha256

Python 比特币区块的sha256,python,blockchain,bitcoin,sha256,Python,Blockchain,Bitcoin,Sha256,如何验证比特币块的哈希 输出: d59eced1ded07f84c145592f65bdf854358e009c5cd705f5215bf18697fed103 但实际哈希是: 0000000000002917ed80650c6174aac8dfc46f5fe36480aaef682ff6cd83c3ca 这里出了什么问题?此python代码将使用截至2011年6月的最小哈希值block计算块的哈希值。标头是由六个字段组成的,这些字段以十六进制表示法连接在一起作为小端点值 此python代

如何验证比特币块的哈希

输出:

d59eced1ded07f84c145592f65bdf854358e009c5cd705f5215bf18697fed103
但实际哈希是:

0000000000002917ed80650c6174aac8dfc46f5fe36480aaef682ff6cd83c3ca

这里出了什么问题?

此python代码将使用截至2011年6月的最小哈希值block计算块的哈希值。标头是由六个字段组成的,这些字段以十六进制表示法连接在一起作为小端点值


此python代码将使用截至2011年6月的最小哈希值block计算块的哈希值。标头是由六个字段组成的,这些字段以十六进制表示法连接在一起作为小端点值


当我运行您的代码时,我得到:

F8AC6BAF0AC904D520DE5287055BFD0F61775D0FC0699FFAFF9F0D7271A021B
not
D59ECEDD007F84C145592F65BDF854358E009C5CD705F5215BF18697FED103

但是,您需要将其散列为字节,而不是字符串(如果使用字符串,则将使用ascii编码):

Python 2 然后,需要将endian反转为big endian

Python 3
当我运行您的代码时,我得到:

F8AC6BAF0AC904D520DE5287055BFD0F61775D0FC0699FFAFF9F0D7271A021B
not
D59ECEDD007F84C145592F65BDF854358E009C5CD705F5215BF18697FED103

但是,您需要将其散列为字节,而不是字符串(如果使用字符串,则将使用ascii编码):

Python 2 然后,需要将endian反转为big endian

Python 3
我对比特币一无所知,但我无法想象你应该用ascii格式的十六进制散列标题。我对比特币一无所知,但我无法想象你应该用ascii格式的十六进制散列标题
0000000000002917ed80650c6174aac8dfc46f5fe36480aaef682ff6cd83c3ca
>>> import hashlib
>>> header_hex = ("01000000" +
 "81cd02ab7e569e8bcd9317e2fe99f2de44d49ab2b8851ba4a308000000000000" +
 "e320b6c2fffc8d750423db8b1eb942ae710e951ed797f7affc8892b0f1fc122b" +
 "c7f5d74d" +
 "f2b9441a" +
 "42a14695")
>>> header_bin = header_hex.decode('hex')
>>> hash = hashlib.sha256(hashlib.sha256(header_bin).digest()).digest()
>>> hash.encode('hex_codec')
'1dbd981fe6985776b644b173a4d0385ddc1aa2a829688d1e0000000000000000'
>>> hash[::-1].encode('hex_codec')
'00000000000000001e8d6829a8a21adc5d38d0a473b144b6765798e61f98bd1d'
from hashlib import sha256
header = '\x01\x00\x00\x00\x95\x00\xc4\x3a\x25\xc6\x24\x52\x0b\x51\x00\xad\xf8\x2c\xb9\xf9\xda\x72\xfd\x24\x47\xa4\x96\xbc\x60\x0b\x00\x00\x00\x00\x00\x00\x6c\xd8\x62\x37\x03\x95\xde\xdf\x1d\xa2\x84\x1c\xcd\xa0\xfc\x48\x9e\x30\x39\xde\x5f\x1c\xcd\xde\xf0\xe8\x34\x99\x1a\x65\x60\x0e\xa6\xc8\xcb\x4d\xb3\x93\x6a\x1a\xe3\x14\x39\x91'
print sha256(sha256(header).digest()).digest().encode('hex')
cac383cdf62f68efaa8064e35f6fc4dfc8aa74610c6580ed1729000000000000
from hashlib import sha256
header = bytes.fromhex('010000009500c43a25c624520b5100adf82cb9f9da72fd2447a496bc600b0000000000006cd862370395dedf1da2841ccda0fc489e3039de5f1ccddef0e834991a65600ea6c8cb4db3936a1ae3143991')
print(sha256(sha256(header).digest()).digest().hex())
cac383cdf62f68efaa8064e35f6fc4dfc8aa74610c6580ed1729000000000000