Private-Key
將 WIF 轉換為私鑰
我知道如何在 python 中將私鑰轉換為 WIF 格式,現在我正在嘗試反轉這個過程並將 WIF 格式的私鑰轉換回 256 位私鑰,遵循本指南:https://en.bitcoin .it/wiki/Wallet_import_format
這是從 256 位私鑰轉換為 WIF 格式的程式碼:
import hashlib import base58 import binascii private_key_static = "0C28FCA386C7A227600B2FE50B7CAE11EC86D3BF1FBE471BE89827E19D72AA1D" extended_key = "80"+private_key_static first_sha256 = hashlib.sha256(binascii.unhexlify(extended_key)).hexdigest() second_sha256 = hashlib.sha256(binascii.unhexlify(first_sha256)).hexdigest() # add checksum to end of extended key final_key = extended_key+second_sha256[:8] # Wallet Import Format = base 58 encoded final_key WIF = base58.b58encode(binascii.unhexlify(final_key)) print (WIF)
現在我試圖扭轉這個過程看起來像這樣:
import hashlib import base58 import binascii private_key_WIF = 5HueCGU8rMjxEXxiPuD5BDku4MkFqeZyd4dZ1jvhTVqvbTLvyTJ first_encode = base58.b58decode(binascii.hexlify(private_key_WIF)) print (first_encode)
我沒有收到字節字元串,而是收到以下錯誤:
TypeError: a bytes-like object is required, not 'str'
(所有使用的私鑰都是取自比特幣維基的範例密鑰。)
不要這樣做:
binascii.hexlify(private_key_WIF)
。這不是你使用的方式binascii.hexlify
。這裡沒有十六進制,字元串也不是字節類對象。private_key_WIF
只是一個字元串。您想將該字元串直接傳遞到其中,base58.b58decode
因為您想解碼 WIF(即 base58)。
將 WIF 私鑰轉換回基本私鑰格式
import hashlib import base58 import binascii private_key_WIF = input("WIF: ") first_encode = base58.b58decode(private_key_WIF) private_key_full = binascii.hexlify(first_encode) private_key = private_key_full[2:-8] print(private_key)