【问题标题】:Sha256 returning incorrect hash values?Sha256 返回不正确的哈希值?
【发布时间】: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 的结果传递给 Python sha256 还是只是字符串?
  • @KevinGuan xxd -r -p 是“反向十六进制转储”,即它应该将十六进制转换回二进制。
  • @melpomene: ​​​​​​​​​​​​​​哦谢谢,就像Simon Kirsten's answer中所说的那样。

标签: python linux bitcoin


【解决方案1】:
import hashlib

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

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

注意区别:

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

第二个哈希是十六进制解码返回的字节字符串。

【讨论】:

    猜你喜欢
    • 2019-03-09
    • 2014-12-03
    • 2021-03-18
    • 2015-12-23
    • 2019-11-10
    • 1970-01-01
    • 2014-04-08
    • 1970-01-01
    • 2017-08-19
    相关资源
    最近更新 更多