Python ECDSA 无法验证签名

Python ECDSA failing to verify signature

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

参数:

address: 33ELcBdg6W7parjGxNYUz5uHVHwPqopNjE

message: hzpPiNlB

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

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

Expected 64 byte signature (128 hexstring), provided 65 byte signature (130 hexstring)

我查看了许多关于 ECDSA 的 Whosebug 问题,但 none 的答案与我的问题 100% 相关。感谢你们的帮助。

更新:我用过比特币Python包。首先完成此操作以获取 public 密钥然后验证:

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

虽然恢复的公钥是错误的,但它以某种方式通过了 True。当使用我从钱包中提取的正确公钥时,由于验证签名,我得到了 False。

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

使用正确的路径提取 pubkey 后,我可以确认:

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

返回 True