主页 > 下载imtoken被盗 > 知道一个有交易的比特币地址,我如何获得它的公钥?

知道一个有交易的比特币地址,我如何获得它的公钥?

下载imtoken被盗 2023-01-17 01:41:49

原理很简单,但是实践起来比较麻烦:

首先我们求这个地址的随机成本,比如:

BTC.com | (比特币)

那你需要一个工具通过交易哈希来解析交易

怎么查询自己有多少比特币

推荐使用这个libbitcoin/libbitcoin-explorer

执行

bx-windows-x64-icu.exe fetch-tx 0998ef06442994c147aec242e6973dfe3d512b05bde880793051a48bd021fc33

解析后得到交易的完整输出:

怎么查询自己有多少比特币

注意脚本部分,它分为两部分怎么查询自己有多少比特币,第一个方括号是签名,后一个是公钥。

然后再仔细看看旧钱包没有压缩生成的地址;

写一个小脚本解析公钥,看是否对应地址:

怎么查询自己有多少比特币

#!/usr/bin/env python
from hashlib import *
from base58 import *
def SHA256D(bstr):
    return sha256(sha256(bstr).digest()).digest()
def ConvertPKHToAddress(prefix, addr):
    data = prefix + addr
    return b58encode(data + SHA256D(data)[:4])
def PubkeyToAddress(pubkey_hex):
    pubkey = bytearray.fromhex(pubkey_hex)
    round1 = sha256(pubkey).digest()
    h = new('ripemd160')
    h.update(round1)
    pubkey_hash = h.digest()
    return ConvertPKHToAddress(b'\x00', pubkey_hash)
pubkey = "044da006f958beba78ec54443df4a3f52237253f7ae8cbdb17dccf3feaa57f3126da0a0909f11998130c2d0e86a485f4e79ee466a183a476c432c68758ab9e630b"
print(len(pubkey))
print("Address: %s" % PubkeyToAddress(pubkey))

输出是这样的:

130
Address: 1HUBHMij46Hae75JPdWjeZ5Q7KaL7EFRSD

好的,收工吧。

怎么查询自己有多少比特币

那就来了解一下吧:

公钥不等于地址。得到公钥后,需要执行RIPEMD160(SHA256(K)),然后进行如下转换:

如果一个地址只收币,从不消费币,公钥不会被广播到互联网,所以这个地址无法获取公钥。获取公钥必须有成本。

怎么查询自己有多少比特币

所以有人建议不要每次刷币都使用旧地址,每次交易都使用新地址,以免日后黑科技(如量子计算机)穷举破解。

实际上,我认为这并不重要。最重要的是有人会打电话给ECDSA挂断,我会转移它。富豪榜上有几个大佬不在乎。

PS:我想更新我的脸。我仍然认为每次交易都需要使用一个新地址。理论上HASH碰撞的概率是2^160,但是我觉得这个量级不能简单。计算为1/2^160;毕竟,并不是所有的钱包都有足够大的熵值。尽可能为每笔交易使用新地址会增加更新冲突库的难度。

再次强调,每次交易都使用新地址是必须培养的习惯。

此外,公钥有两种形式:压缩的和未压缩的。一个私钥实际上可以产生两个地址。在比特币的早期,使用的是未压缩的公钥,现在大多数客户端默认使用压缩的公钥。早期,openssl 库的文档比较粗糙,导致 Satoshi 认为必须使用未压缩的完整公钥。后来大家发现公钥的左右32个字节是有关系的,左边(X)可以推导出右边(Y的平方值)怎么查询自己有多少比特币,有左边(X)就够了)。