【发布时间】:2016-06-10 22:52:57
【问题描述】:
我正在尝试对比特币私钥进行哈希处理以获取校验和,python 中的两个不同库(hashlib + pycrypto)返回了相同的错误结果(仅在 1 个哈希之后)。
在 linux 终端中,我得到了正确的哈希结果:
echo -n 8018ac3e7343f016890c510e93f935261169d9e3f565436429830faf0934f4f8e4 | xxd -r -p | sha256sum -b
result: cd358f378809b3043ded3782d849fbad70f92a2dadefafd985d9aef443752e57
但是,hashlib、pycrypto 和在线 SHA2 哈希工具返回值:
5d6dce0f36a50abe51ee435ac11dac05f7879c1cd1ca5bc7aae706e5a3776d4a
我不确定它们为什么返回不同的值。
这里有两个由它们生成的 WIF-key,第一个使用命令行函数,第二个使用 python;第二个无效(钱包软件不接受)。
5J19pGYtJzuS7VoAQjxDjUGgWXSNqj18GWSWvFVqJzQqGtxZf2V
5J19pGYtJzuS7VoAQjxDjUGgWXSNqj18GWSWvFVqJzQqGvDc8hm
【问题讨论】:
-
Python 库没有返回错误的值。向我们展示您的代码,我们可能会告诉您您遇到问题的原因。 (我猜这与 Python 2 中常见的 unicode/string 混淆有关。)
-
我认为问题是因为
xxd -r -p。如果您尝试echo -n 8018ac3e7343f016890c510e93f935261169d9e3f565436429830faf0934f4f8e4 | sha256sum -b,您还会得到不正确的哈希值。但是我不知道xxd做了什么,但你是把xxd的结果传递给 Pythonsha256还是只是字符串? -
@KevinGuan
xxd -r -p是“反向十六进制转储”,即它应该将十六进制转换回二进制。 -
@melpomene: 哦谢谢,就像Simon Kirsten's answer中所说的那样。