Bitcoin—块散列算法
BTC Block
点击进入Height为658423的哈希值(000000000000000000014788256270fc5db06737c3cfa3b04d258dbdfaacb45c)
Block hash算法
它有多强大呢?举个例子:
1 | from hashlib import sha256 |
通过它构造的消息,其哈希值后面有很长的一段0!想知道上面的消息怎么构造,请往下看:
准备工作
- 安装pyCryptodome库
1 | pip3 install pyCryptodome -i https://pypi.douban.com/simple |
- 安装curl工具
如果你用的Linux系统,curl工具可通过命令行安装;
对于我使用的Windows系统,去官网下载工具包,解压到C:\Windows\System32目录下或者将bin目录下的curl.exe的路径加入环境变量;
获取构造特定哈希值的信息
对我们想要的哈希值000000000000000000014788256270fc5db06737c3cfa3b04d258dbdfaacb45c,在命令行运行:1
# curl https://blockchain.info/rawblock/000000000000000000014788256270fc5db06737c3cfa3b04d258dbdfaacb45c > data
因为返回的消息太多了,因此输出重定向到文件中存下来;我们主要关注的有:ver、prev_block、mrkl_root、time、bits与nonce;这些值提取出来如下:1
2
3
4
5
6data={'ver':541065216,
'prev_block':'00000000000000000009f1410ac69d92199991a699b268d56d99daf6067c8711',
'mrkl_root':'9ad7e80cf4a94f57c36876ab999f3cf23de188d482b8a3af8fb5e08ec1e18a6e',
'time':1606199690,
'bits':386924253,
'nonce':232397866}
注意:ver、time、bits与nonce找最前面的,prev_block与mrkl_root找最后面的,不然算出来的哈希值会不是我们想要的。
接下来,使用我写好的脚本如下,通过将这些信息组合起来就可以构造出消息,其哈希值就是000000000000000000014788256270fc5db06737c3cfa3b04d258dbdfaacb45c!
1 | from hashlib import sha256 |
程序运行结果如下:
1 | # python3 Bitcoin.py |