我正在使用 eth-keyfile
从以太坊密钥文件中提取私钥。
# https://github.com/ethereum/eth-keyfile
from eth_keyfile import extract_key_from_keyfile
password = b'secretpassword'
extracted = extract_key_from_keyfile('testkey.json', password)
print(extracted.decode('utf-8'))
我得到一个 UnicodeDecodeError: 'utf-8' codec can't decode byte 0xd4 in position 0: invalid continuation byte
。我也尝试过其他编码(utf-16、latin-1)。
如何找出要使用的编码?
答案 0 :(得分:1)
我对以太坊了解不多,但据我从 Google 快速搜索中得知,您可能希望以十六进制字符串的形式表示字节字符串。
假设您使用的是 Python 3+;这应该可以解决问题:
from eth_keyfile import extract_key_from_keyfile
password = b'secretpassword'
extracted = extract_key_from_keyfile('testkey.json', password)
print(extracted.hex())
为了更好地理解发生了什么,我做了这个小演示:
>> # Python bytestring filled with the byte 0x41
>> bytes = b"\x41\x41\x41\x41"
>> # 0x41 is the ascii representation of the character 'a' so:
>> print(bytes.decode('utf-8'))
>> "aaaa"
>> # Now we have a regular string with the characters '4' '1':
>> print(bytes.hex())
>> "41414141"