gpt4 book ai didi

python - 使用 pyopenssl 验证签名

转载 作者:太空狗 更新时间:2023-10-29 23:55:23 24 4
gpt4 key购买 nike

我相信自从这个 question , pyOpenSSL 已经开始支持签名验证(自 pyOpenSSL 0.11 开始。

我正在做一个由其他人使用 M2Crypto 启动的项目. M2Crypto 包含在 Heroku 等平台上真的很痛苦因为它需要使用 SWIG .因此,我试图删除对 M2Crypto 的依赖并替换为 pyOpenSSL,它很容易通过 Pip 安装,并且不需要自定义构建包和更多与 SWIG 相关的东西。

我遇到的问题是替换一些代码:

key = cert.get_pubkey() # Cert is an M2Crypto X509 object
key = key.get_rsa()
ret = key.verify(hashed, self.sig)
if ret != 1:
# Cert invalid ... etc.

理想情况下,我想通过 pyOpenSSL 实现相同的功能,但感觉我可能走错了路——我试过使用:

crypto.verify(cert, self.sig, hashed, 'sha1')

但这失败了-

[('rsa routines', 'RSA_verify', 'bad signature')]

我无法确定它是否失败是因为签名实际上是错误的,还是因为我提供的 crypto.verify 值实际上不是它应该用于的值!

我一直在玩的原始代码是here并且需要大量的工作来整理,但在完全重构之前尝试一次一步地替换功能。任何指针将不胜感激! pyOpenSSL 是否有能力在此处替换 M2Crypto 功能,我的处理方式是否正确?

最佳答案

所以答案来自阅读更多的 pyOpenSSL 源代码,以及来自 exarkun 的指针。 . pyOpenSSL 确实可以在这里替换 M2Crypto 依赖项,只需对底层代码进行非常小的更改。

crypto.verify() 函数的单元测试 here显示接听电话:

verify(good_cert, sig, content, digest)

因此我上面的代码出现了错误:

crypto.verify(cert, self.sig, hashed, 'sha1')

当签名应用于原始数据字符串时,应该简单地获取“数据”,而不是散列:

# N.B. cert = X509 object (from crypto.load_certificate())
crypto.verify(cert, self.sig, data, 'sha1')

此行为似乎不同于 M2Crypto 的验证,后者采用散列数据字符串来执行其验证。请注意,我没有特别深入地研究 M2Crypto 的函数来弄清楚发生了什么。

感谢exarkun他对 pyOpenSSL mailing list 的回应这指出我调用 verify() 时出错,而不是我对 verify() 正在做什么的理解。

关于python - 使用 pyopenssl 验证签名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12146985/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com