Wallet
生成 WIF 私鑰時,base58check(‘80’.decode(‘hex’)) 不前綴為 ‘5’
我嘗試用 python 生成 WIF 私鑰。
import base58 import hashlib def b58(hex): return base58.b58encode(hex) def sha256(hex): return hashlib.sha256(hex).digest() def main(): k = sha256('private_key') extend = '80' + k.encode('hex') sha1 = sha256(extend.decode('hex')) sha2 = sha256(sha1) print b58(extend.decode('hex') + sha2[:8]) if __name__ == '__main__': main()
結果的前綴不是“5”而是“V”
我嘗試只對 0x80 進行 base58encode,結果是 3D ???
這段程式碼的錯誤在哪裡?
通過使用這個工具比較所有變數,我發現錯誤在這一行:
print b58(extend.decode('hex') + sha2[:8])
請記住,這
sha2
是一個字節數組而不是十六進製字元串。您可以將 替換為8
a4
以使您的程式碼正常工作。您還可以將程式碼進一步簡化為:
def b58(hex): return base58.b58encode_check(hex) def sha256(hex): return hashlib.sha256(hex).digest() def main(): k = sha256('private_key') extend = '80'.decode('hex') + k print b58(extend)
對於今天的 Python 3,我發現使用以下程式碼:
#!/usr/bin/env python3 import base58 import hashlib import sys def b58(hex): return base58.b58encode_check(hex) def sha256(hex): return hashlib.sha256(hex).digest() def main(): k = sha256(str(sys.argv[1]).encode('utf-8')) extend = '80' + k.hex() print(b58(bytes.fromhex(extend)).decode('utf-8')) if __name__ == '__main__': main()