在ecdsa,python中正确编码

时间:2017-08-22 13:54:02

标签: python ecdsa

我正在按照技术说明如何创建比特币钱包。

它说:

private_key = 18E14A7B6A307F426A94F8114701E7C8E774E7F9A47E2C2035DB29A206321725

1 - 获取用它生成的相应公钥(65字节,1字节0x04,32坐标对应X坐标,32字节对应Y坐标)

public_key= 0450863AD64A87AE8A2FE83C1AF1A8403CB53F53E486D8511DAD8A04887E5B23522CD470243453A299FA9E77237716103ABC11A1DF38855ED6F2EE187E9C582BA6

和我在python 3.5.2中的代码:

from ecdsa import SigningKey, SECP256k1

private_key = '18E14A7B6A307F426A94F8114701E7C8E774E7F9A47E2C2035DB29A206321725'

x = SigningKey.from_string(private_key, curve=SECP256k1)
print(x)

错误:

output = ERROR: assert len(string) == curve.baselen, (len(string), curve.baselen)
builtins.AssertionError: (64, 32)

我不确定该怎么做,因为任何操作都会返回不同的public_key。任何想法如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

您在上面的示例中使用的私钥似乎是十六进制格式。功能,

 from_string(private_key, curve=SECP256k1) 

取一个字符串private_key。因此,您必须将字符串版本传递给

,而不是传递十六进制格式的私钥

以下是我尝试过的,似乎工作正常,

 private_key = SigningKey.generate(curve=SECP256k1)
 string_private_key = private_key.to_string()
 SigningKey.from_string(string_private_key, curve=SECP256k1)

这成功返回ecdsa签名密钥对象

<ecdsa.keys.SigningKey object at 0x103a53f60>