Python3;比特币; sha256哈希;私钥到钱包导入格式双哈希不起作用

时间:2016-08-27 03:17:41

标签: python-3.x hash sha256 private-key bitcoin

我正在尝试将自己的私钥写入wif格式代码。我相信我的base58编码是正确的,但我没有得到相同的输出。当我进一步回到我的代码中时,我注意到我的双sha256哈希的输出不一样,这导致了一个不同的校验和并将所有内容抛到了一线。

以下是我的问题所在的一些代码。这部分内容仅针对此帖重写,并留下了我不需要为此问题显示的所有其他步骤。

import hashlib

a = "800C28FCA386C7A227600B2FE50B7CAE11EC86D3BF1FBE471BE89827E19D72AA1D"


def double_hash(num):
    first_hash = hashlib.sha256(num.encode()).hexdigest()
    print(first_hash, "first hash")
    second_hash = hashlib.sha256(first_hash.encode()).hexdigest()
    return second_hash


def main():
    print(double_hash(a))


if __name__ == "__main__":
    main()

# ---- Output ----
# >>> e2e4146a36e9c455cf95a4f259f162c353cd419cc3fd0e69ae36d7d1b6cd2c09 first hash
# >>> fe32ab4c7a99d37256148b0dabc6390272ebe2572b943abc2580bfdacac98fbc

# ---- Expected output ----
# 8147786C4D15106333BF278D71DADAF1079EF2D2440A4DDE37D747DED5403592 first hash
# 507A5B8DFED0FC6FE8801743720CEDEC06AA5C6FCA72B07C49964492FB98A714

这是我的来源:
https://en.bitcoin.it/wiki/Wallet_import_format

1 个答案:

答案 0 :(得分:0)

我不确定我是怎么来的。我在想,十六进制数字的字符串表示必须转换成其他数字。所以我试图将它变成二进制格式。从试验和错误中,我偶然发现它试图取消它,并且它起作用了。

import hashlib
import binascii

a = "800C28FCA386C7A227600B2FE50B7CAE11EC86D3BF1FBE471BE89827E19D72AA1D"


def double_hash(num):
    first_hash = hashlib.sha256(binascii.unhexlify(num)).hexdigest()
    print(first_hash, "first hash")
    second_hash = hashlib.sha256(binascii.unhexlify(first_hash)).hexdigest()
    return second_hash


def main():
    print(double_hash(a))


if __name__ == "__main__":
    main()

# ---- Output ----
# 8147786c4d15106333bf278d71dadaf1079ef2d2440a4dde37d747ded5403592 first hash
# 507a5b8dfed0fc6fe8801743720cedec06aa5c6fca72b07c49964492fb98a714

# ---- Expected output ----
# 8147786C4D15106333BF278D71DADAF1079EF2D2440A4DDE37D747DED5403592 first hash
# 507A5B8DFED0FC6FE8801743720CEDEC06AA5C6FCA72B07C49964492FB98A714