Python edcsa SECP256k1 签名不正确

标签 python cryptography digital-signature ecdsa

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

我生成了该 key

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

签名数据

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

当我用 js 在线工具中的 key 检查标志时,它说您的标志无效。我还使用相同的 key 生成了符号,并在该工具中检查了 java 符号,它说它是有效的符号。为什么在线工具显示 python ecdsa 符号的符号无效。 python 符号有什么问题?

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

最佳答案

我解决了问题。我添加了 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

关于Python edcsa SECP256k1 签名不正确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50176372/

相关文章:

java - 使用 Java itext 库签署 PDF 会因大文件而崩溃

python - Django 1.6.2 : CSS not extending to child templates

python - Heroku 中的依赖库存放在哪里?

c - poly1305-donna-16.h代码验证

C# RSA 加密算法

ios - 如何在 iPhone 上生成证书签名?

java - Android源码变更签名

python - 值错误 ("color kwarg must have one color per dataset")?

python - 安装 PIL 时出现语法错误

iOS:将私钥添加到设备 KeyChain