编程语言
首页 > 编程语言> > python – M2Crypto RSA.sign vs OpenSSL rsautl -sign

python – M2Crypto RSA.sign vs OpenSSL rsautl -sign

作者:互联网

M2Crypto和OpenSSL CLI似乎没有创建相同的数字签名.这是我在Python中使用的代码:

import M2Crypto
rsa = M2Crypto.RSA.load_key("privkey.pem")
open("sig_m2crypto", "w").write(rsa.sign("md5-digest", "md5"))

这是OpenSSL的命令行:

echo "md5-digest" | openssl rsautl -sign -inkey privkey.pem > sig_openssl

使用相同的输入,sig_m2crypto和sig_openssl的结果总是不同的.重要的是我无法验证使用M2Crypto与OpenSSL生成的签名,反之亦然.

我的代码中是否有任何缺失使它们彼此不兼容?

附加信息:我在Windows 7下使用M2Crypto 0.21.1和OpenSSL 1.0.0.

解决方法:

尝试这个:

echo -n "test" | openssl md5 -sign privkey.pem > sig_openssel

(-n很重要,以便在字符串后不添加额外的换行符)*

在python方面:

import M2Crypto
import hashlib
rsa = M2Crypto.RSA.load_key("privkey.pem")
digest = hashlib.new('md5', 'test').digest()
open("sig_m2crypto", "w").write(rsa.sign(digest, "md5"))

现在你的sig应该是相同的.

要查看签名文件中的实际内容,您可以使用:

openssl rsautl -inkey privkey.pem -verify -in sig_m2crypto -asn1parse

openssl rsautl -inkey privkey.pem -verify -in sig_m2crypto -raw -hexdump

正确的签名包含有关使用的摘要的信息,如果您只使用openssl rsautl -sign,则不包含该摘要…

*编辑:至少在Linux上,因为你在Windows上我真的不知道你是否需要它.

标签:m2crypto,python,openssl,digital-signature,pki
来源: https://codeday.me/bug/20191008/1872206.html