我正在尝试将自己的私钥写入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
答案 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