尝试使用Python验证SHA1消息签名。我错在哪里?

11 投票
2 回答
1421 浏览
提问于 2025-04-17 17:46

我正在尝试验证一条消息的SHA1签名,方法是从一个网站下载证书并提取它的公钥。在StackOverflow上有一些示例代码(这里这里),但是我还没搞清楚自己哪里出错了。

import requests
from M2Crypto import BIO, RSA, EVP, X509

def verify_message(cert_url, msg, sig):
    cert_text = requests.get(cert_url, verify=True)
    cert = X509.load_cert_string(cert_text.content)
    pubkey = cert.get_pubkey()
    sig = sig.decode('base64')

    # Write a few files to disk for debugging purposes
    f = open("sig", "wb")
    f.write(sig)
    f.close()

    f = open("msg", "w")
    f.write(msg)
    f.close()

    f = open("mypubkey.pem", "w")
    f.write(pubkey.get_rsa().as_pem())
    f.close()

    pubkey.reset_context(md='sha1')
    pubkey.verify_init()
    pubkey.verify_update(msg)
    assert pubkey.verify_final(sig) == 1

这段代码让我遇到了一个断言错误:

  File "/tmp/test.py", line 71, in verify_message
    assert pubkey.verify_final(sig) == 1
AssertionError

不过,如果我在命令行中使用openssl,配合上面Python脚本生成的文件,就能正常工作:

[jamie@test5 tmp]$ openssl dgst -sha1 -verify mypubkey.pem -signature sig msg
Verified OK

我在这里遇到了瓶颈;如果有任何建议,我会非常感激。谢谢!

2 个回答

1

这段代码在我这边运行得非常好。

5

你的代码运行得很好——https://gist.github.com/kalloc/5106808。我看到这里还有其他问题。

撰写回答