Private-Key

將 WIF 轉換為私鑰

  • June 21, 2020

我知道如何在 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)

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