2017-08-22 66 views
1

我遵循技術說明如何創建比特幣錢包。ecdsa中的正確編碼,python

它說:

private_key = 18E14A7B6A307F426A94F8114701E7C8E774E7F9A47E2C2035DB29A206321725 

1 - 以與它生成的相應的公共密鑰(65個字節,1個字節0×04,對應於X 32個字節座標,對應於Y 32個字節座標)

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。任何想法如何解決這個問題?

+0

查看更多[Bitcoin Key from Private Key](https://bitcoin.stackexchange.com/questions/25024/how-do-you-get-a-bitcoin-public-key-from-a - 私人密鑰) – user3477334

回答

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>