我正在尝试从一个未压缩的dsa公钥派生一个。在
给你更多细节:到目前为止,我已经在比特币网络上收集了压缩密钥(33字节长)。在
它们的格式如下:<;1字节长前缀>;<;32字节长X>;。
从那里,我想获得一个未压缩的密钥(65字节长),其格式为:
<;1字节长前缀>;<;32字节长X>;<;32字节长Y>
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
作为参考,我的输出是:
^{pr2}$
谢谢你的帮助!在