Python edcsa SECP256k1未正确签名

时间:2018-05-04 13:42:33

标签: python cryptography digital-signature ecdsa

我使用https://github.com/warner/python-ecdsa库来创建私钥和公钥。

我生成了那些键

private key = 'ffbd2d76fde8d62642379e507f4ab69883e094708410392d8470246146195e56'
public key = '04' + '615a523e41d5984d5afc18e5adddddfa0ab8ac63b49933ff1b07fae90604fa6cdd6572996117b3ffce6e1258668c88fc2aad3c45eab31ef8a57b5176c91b272a'

签名数据

message = 'aaa'
signHex = privateKey.sign(message,hashfunc=hashlib.sha256).encode("hex")
# signHex : afe2f94df735d1d0c571c9c10dbd3e9271ad1dd4e6c5d523901324c01a4de25e5b9825f8de3fffeebd477f575c83997998df32e8b0a7053b5a43813f269bd4ee

当我在js在线工具中用我的钥匙检查标志时,它表示您的标志无效。我也生成了带有相同键的符号,并在此工具中检查了java符号,它表示它是有效的符号。为什么在线工具说python ecdsa标志的无效标志。用于签名的python有什么问题?

在线工具:https://kjur.github.io/jsrsasign/sample/sample-ecdsa.html

1 个答案:

答案 0 :(得分:1)

我解决了问题。我添加了sigencode = sigencode_der参数,它工作正常。

正确的签名代码:

from ecdsa import SigningKey, VerifyingKey, SECP256k1
from ecdsa.util import sigencode_der

message = 'aaa'
signHex = privateKey.sign(message,hashfunc=hashlib.sha256,sigencode=sigencode_der).encode("hex")
# signHex = 3044022072ae5b5cf026796ee8217df26eb70f3dd72016f87af0a5fd8d6a99faf51e77f802206a77d3a3acc9540721f34e776b8feb7e2ea69e321d25872d3d65b7fd15c8132d