Sha256返回不正确的哈希值?

问题描述:

我想散列一个比特币私钥来获取校验和,并且python中的两个不同的库(hashlib + pycrypto)正在返回相同的错误结果(仅在1个散列之后)。Sha256返回不正确的哈希值?

在Linux终端,我得到正确的散列结果与线:

echo -n 8018ac3e7343f016890c510e93f935261169d9e3f565436429830faf0934f4f8e4 | xxd -r -p | sha256sum -b 
result: cd358f378809b3043ded3782d849fbad70f92a2dadefafd985d9aef443752e57 

然而,hashlib,pycrypto,以及在线SHA2哈希工具返回值:

5d6dce0f36a50abe51ee435ac11dac05f7879c1cd1ca5bc7aae706e5a3776d4a 

我米不知道他们为什么返回不同的值。

这里有两个由它们生成的WIF密钥,第一个使用命令行功能,第二个使用python;第二个是无效的(不被钱包软件接受)。

5J19pGYtJzuS7VoAQjxDjUGgWXSNqj18GWSWvFVqJzQqGtxZf2V 
5J19pGYtJzuS7VoAQjxDjUGgWXSNqj18GWSWvFVqJzQqGvDc8hm 
+3

Python库不会返回错误的值。告诉我们你的代码,我们可能会告诉你为什么你有麻烦。 (我猜猜它与Python 2中常见的unicode /字符串混淆有关。) –

+0

我认为问题是因为'xxd -r -p'。如果您尝试'echo -n 8018ac3e7343f016890c510e93f935261169d9e3f565436429830faf0934f4f8e4 | sha256sum -b'你也会得到*不正确的散列值*。但是我不知道'xxd'是干什么的,但是你把'xxd'的结果传给了Python'sha256'还是只是字符串? –

+1

@KevinGuan'xxd -r -p'是“反转hexdump”,即它应该将十六进制转换回二进制。 – melpomene

import hashlib 

print(
    hashlib.sha256("8018ac3e7343f016890c510e93f935261169d9e3f565436429830faf0934f4f8e4").hexdigest() 
) 

print(
    hashlib.sha256("8018ac3e7343f016890c510e93f935261169d9e3f565436429830faf0934f4f8e4".decode("hex")).hexdigest() 
) 

通知的区别:

第一散列码十六进制字符串。

第二次散列字符串,由十六进制解码返回。