Wallet

生成 WIF 私鑰時,base58check(‘80’.decode(‘hex’)) 不前綴為 ‘5’

  • June 19, 2020

我嘗試用​​ 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是一個字節數組而不是十六進製字元串。您可以將 替換為8a4以使您的程式碼正常工作。

您還可以將程式碼進一步簡化為:

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()

引用自:https://bitcoin.stackexchange.com/questions/91327