当前位置: 首页 > 知识库问答 >
问题:

Python ECDSA无法验证签名

詹斌蔚
2023-03-14

我正在尝试在python中使用ECDSA验证比特币签名,但发现它非常困难,许多尝试已经失败了。

参数:

address: 33ELcBdg6W7parjGxNYUz5uHVHwPqopNjE

message: hzpPiNlB

signature(base64): I2fKdGNtR5owOWVoWchMVWwC/gf4qyYZ8G+kvuR7CaBhU/0SO149a3/ylBaiVWzfUoXI5HlgYPjkrptk0HfW1NQ=

注意:我已经根据ECDSA的要求将签名从base64转换为hexstring。每当我试图验证它时,它会说:

预期64字节签名(128十六进制字符串),提供了65字节签名(130十六进制字符串)

我查看了许多关于ECDSA的stackoverflow问题,但没有一个答案与我的qs 100%相关。感谢你们的帮助。

更新:我使用了比特币Python包。先这样做才能得到公钥

pip install bitcoin

>>> message = 'hzpPiNlB'
>>> signature = 'I2fKdGNtR5owOWVoWchMVWwC/gf4qyYZ8G+kvuR7CaBhU/0SO149a3/ylBaiVWzfUoXI5HlgYPjkrptk0HfW1NQ='
>>> import bitcoin
>>> recover_key = bitcoin.ecdsa_recover(message, signature)
>>> print(recover_key)
04bbdd00bafea40bf7b268baff4ec7635a0b12e94542067cf4077369be938f7b733c731248b88bb0f8b14783247705e568effd54e57643fc827852cf77d0ed8313
>>> verify = bitcoin.ecdsa_verify(message, signature, recover_key)
>>> print(verify)
True

虽然恢复的pubkey是错误的,但不知何故,它是正确的。当使用我从钱包中提取的正确公钥时,由于验证签名,我得到了错误。

 >>> message = 'hzpPiNlB'
 >>> signature = 'I2fKdGNtR5owOWVoWchMVWwC/gf4qyYZ8G+kvuR7CaBhU/0SO149a3/ylBaiVWzfUoXI5HlgYPjkrptk0HfW1NQ='
 >>> pub_key = '0352ab1e8ef8553fb307ae8dcafd2395fd06e5ca882f0e27143cb15cf495cc435e'
 >>> import bitcoin
 >>> verify = bitcoin.ecdsa_verify(message, signature, pub_key)
 >>> print(verify)
 False

共有1个答案

岳允晨
2023-03-14

使用正确的路径提取<code>pubkey

verify = bitcoin.ecdsa_verify(message, signature, pub_key).

返回 True

 类似资料:
  • 问题内容: 我正在使用node.js request.js到达api。我收到这个错误 [错误:UNABLE_TO_VERIFY_LEAF_SIGNATURE] 我所有的凭据都是准确有效的,并且服务器还不错。我对邮递员提出了同样的要求。 此代码仅在可执行脚本ex中运行。,那是为什么?是否需要在服务器上运行? 问题答案: 注意 :以下情况很危险,并且将允许在客户端和服务器之间截取和修改API内容。 这

  • 我是从IDP接收SAML断言签名的服务提供商。我在Tomcat上使用JOSSO来使用断言。这里的问题是我无法验证断言签名。 IDP证书使用别名“IDP”上传到我的密钥库。 在验证sig时,我得到以下错误: 为什么JOSSO无法检测密钥库中的证书并验证签名?我需要以不同的方式定义别名吗?

  • 我试图使用javascript创建ECDSA算法的密钥对,签名消息,然后在服务器端验证它(使用Java)。 示例javascript代码: 例如: 我做错了什么?

  • 我传入以下内容(摘要/哈希是SHA1): 到此功能: 但我无法在OpenSSL中验证签名(verify_success为0),即使完全相同的数据在C#中验证成功。 关于我为什么或做错了什么的任何想法? C#中的公钥是: 我假设4543533120000000是。NET特定的东西,所以我只是把04前置到它的其余部分。 这是用于验证签名的C#代码,它成功地做到了(dataBytes的SHA1在两个程序

  • 我写一个oauth与twitter的代码,我有401错误代码和"失败验证oauth签名和令牌"响应从twitter当我获取后请求到https://api.twitter.com/oauth/request_token.这是我的数据,我有: 我的步骤: 1.为签名准备的字符串 2.通过代码创建签名qQwIvFao9yeIQpi9ouz0oFi7/v8=: 3.最终授权标头(带转义引号): 问那些可能

  • 当我重新启动identityserver4客户端应用程序第一次获得异常时,我使用identityserver4处理SSO问题 因此,我将更改为但在重新启动identityserver时仍然会出现错误