我创建了一个OpenSSL的公/私钥,并签署了一些数据:在Python现在如何验证由openssl创建的pycrypto签名?
openssl genrsa -out private.pem 1024
openssl rsa -in private.pem -out public.pem -outform PEM -pubout
echo 'data to sign' > data.txt
openssl dgst -md5 <data.txt> hash
openssl rsautl -sign -inkey private.pem -keyform PEM -in hash > signature
,我想验证这样的数据:
pubKey = open('public.pem').read()
data = open('data.txt').read()
signature = open('signature').read()
from Crypto import PublicKey
key = PublicKey.RSA.importKey(pubKey)
pub = key.publickey()
hash = MD5.new(data).hexdigest()
# here, hash is same, as contents of 'hash' file
print pub.verify(hash, signature) # <-- here
问题,pub.verify
期望第二个参数是一个大数目的单元素列表。我不知道如何将文件signature
中的二进制数据转换为此整数。关于pycrypto的每个示例都显示从 pycrypto生成的签名,并且key.sign()
以(1832273432...2340234L,)
的形式生成正确的签名。但我不知道如何使用外部签名。
如果这是必要的,下面是附加的信息,我不知道究竟如何解释:
简要技术信息:
- 格式的数字签名:PKCS#7“的人签署数据”
- 公钥过程:DSS
- 密钥长度:512 - 1024位
- 公共指数:2 +1
- 公钥格式:X.509 v3证书
- MD(消息摘要)算法:MD5或RIPEMD-160 16
我不知道这是否是相关的。你的变量('pemstring')表明你想用'private.pem'(或'public.pem')文件做一些事情,但我需要以某种方式解析'签名'文件。现在我已经注意到,我忘了在示例代码中添加两个相关的部分,我刚刚纠正了它们。如果我尝试将你的代码应用于'signature'文件的内容,那么我得到了'ValueError:负INTEGER.'异常 – Ivan 2011-06-15 18:47:15
我也不是,但你没有什么意见和答案,所以我提供了我所能提供的。如果你觉得它没有帮助,我会很高兴删除它。 – cwallenpoole 2011-06-15 19:39:13