【发布时间】:2017-09-23 13:34:19
【问题描述】:
我目前正在尝试从压缩的公钥中导出比特币未压缩的 ECDSA 公钥。
根据这个link on the Bitcoin wiki,是可以做到的……但是怎么做呢?
为您提供更多详细信息:截至目前,我已经在比特币网络上收集了压缩密钥(33 字节长)。
它们的格式如下:。 从那里,我想获得一个未压缩的密钥(65 字节长),其格式为:
根据这个other link on the Bitcoin wiki,应该和解方程一样简单:
Y^2 = X^3 + 7
但是,我似乎无法到达那里。我对 Y 的价值简直太遥远了。这是我的代码(公钥的值来自Bitcoin wiki example):
import binascii
from decimal import *
expected_uncompressed_key_hex = '0450863AD64A87AE8A2FE83C1AF1A8403CB53F53E486D8511DAD8A04887E5B23522CD470243453A299FA9E77237716103ABC11A1DF38855ED6F2EE187E9C582BA6'
expected_y_hex = expected_uncompressed_key_hex[-64:]
expected_y_dec = int(expected_y_hex, 16)
x_hex = expected_uncompressed_key_hex[2:66]
if expected_y_dec % 2 == 0:
prefix = "02"
else:
prefix = "03"
artificial_compressed_key = prefix + x_hex
getcontext().prec = 500
test_dec = Decimal(int(x_hex, 16))
y_square_dec = test_dec**3 + 7
if prefix == "02":
y_dec = - Decimal(y_square_dec).sqrt()
else:
y_dec = Decimal(y_square_dec).sqrt()
computed_y_hex = hex(int(y_dec))
computed_uncompressed_key = "04" + x + computed_y_hex
关于信息,我的输出是:
computed_y_hex = '0X2D29684BD207BF6D809F7D0EB78E4FD61C3C6700E88AB100D1075EFA8F8FD893080F35E6C7AC2E2214F8F4D088342951'
expected_y_hex = '2CD470243453A299FA9E77237716103ABC11A1DF38855ED6F2EE187E9C582BA6'
感谢您的帮助!
【问题讨论】:
-
一个带有比特币标签的实际编程问题。这很少见……
标签: python bitcoin public-key ecdsa