【发布时间】:2021-06-03 20:18:13
【问题描述】:
我正在使用 BTCRecover python 脚本尝试转储旧(MultiBit Classic)比特币钱包的内容。具体来说,我正在尝试恢复私钥。当我运行脚本时,它会将钱包识别为 bitcoinj 钱包格式,这显然是使用协议缓冲区进行序列化的。脚本失败并出现错误"bitcoinj wallet is not encrypted"。没关系,我怀疑它没有加密...我只是想转储未加密的密钥。
我修改了 Python 脚本,在协议缓冲区反序列化后打印出钱包,这是输出(secret_bytes 省略):
Starting btcrecover 1.10.0-Cryptoguide on Python 3.9.5 64-bit, 21-bit unicodes, 64-bit ints
network_identifier: "org.bitcoin.production"
last_seen_block_hash: "\000\000\000\000\000\000\0019\017+j\246\336\317\251q\277zL;\302n\237\022\r.\032sM\240S\306"
key {
type: ORIGINAL
secret_bytes: "XXXXXXXX"
public_key: "\003\nJK\303\3561\216\250\027\213\366X\374\262E)\010\022\215[%\224~\007K5\346*\372\315\231\222"
creation_timestamp: 1365727360000
}
文件似乎已正确反序列化,但last_seen_block_hash、public_key 和secret_bytes 没有意义(无论如何对我来说)。当我只打印public_key 时,结果如下:
b'\x03\nJK\xc3\xee1\x8e\xa8\x17\x8b\xf6X\xfc\xb2E)\x08\x12\x8d[%\x94~\x07K5\xe6*\xfa\xcd\x99\x92'
我尝试在具有许多不同编码(utf-8、utf-16、utf-16-be、utf-32、latin1、ascii 等)的字节文字上运行 .decode()。在每种情况下,我都会收到错误或乱码。
有人知道这是什么编码吗?还是这里有更深层次的问题?
【问题讨论】:
-
In each case I either get an error or gibberish.你到底期待什么?原始二进制数据不是文本。 -
@tkausl,对,我希望将原始二进制数据转换为字符串。我是不是搞错了?
-
你想要什么编码?十六进制? Base64?选择一个并编码。
-
当我运行
>>> b'\x03\nJK\xc3\xee1\x8e\xa8\x17\x8b\xf6X\xfc\xb2E)\x08\x12\x8d[%\x94~\x07K5\xe6*\xfa\xcd\x99\x92'.encode("utf-8")时,我得到:Traceback (most recent call last): File "<stdin>", line 1, in <module> AttributeError: 'bytes' object has no attribute 'encode'
标签: python encoding character-encoding protocol-buffers bitcoin