Python edcsa SECP256k1 неправильно подписывает - PullRequest
0 голосов
/ 04 мая 2018

Я использую библиотеку 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 голосов
/ 07 мая 2018

Я решил проблему. Я добавил параметр 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
...