我需要使用存储在.pem文件中的私钥在python中对一些文本进行数字签名。现在看来M2Crypto是首选的方法,所以这就是我使用的。我想我已经了解了大部分,但是我不知道如何配置填充。具体地说,我需要在iPhone应用程序中验证签名,使用名为kSecPaddingPKCS1SHA1
的填充方案,描述如下:
Data to be signed is a SHA1 hash. Standard ASN.1 padding will be done, as well as PKCS1 padding of the underlying RSA operation.
作为一个密码专家,我对这意味着什么只有一个模糊的概念。我试过查看一些rfc,但发现它们无法穿透。我看到RSA对象的加密/解密方法采用填充类型,但是我没有看到与签名验证相关的任何类似的东西。在
任何帮助,特别是代码方面的帮助,我们将不胜感激。在
(从某种意义上说,这是this question的相反情况。)
好的,下面给出的答案是正确的。下面的代码为text
生成一个签名,该签名在iPhone上使用kSecPaddingPKCS1SHA1
填充方案进行验证。在
from M2Crypto import EVP
privkey = EVP.load_key("privkey.pem")
privkey.sign_init()
privkey.sign_update(text)
signature = privkey.sign_final()
(很抱歉发表社论,但我能说密码黑客是世界上最糟糕的文档作者之一吗?)在
AFAIK M2Crypto在需要的地方添加填充。在
默认为PKCS1 padding。在
但是,(同样是AFAIK),签名没有填充,填充只是添加到加密数据中以防止可能的攻击。
编辑:用户caf在一条评论中说,填充对于一个好的签名是必不可少的。我仍然建议您尝试使用默认的M2Crypto行为,它可能会添加它。在
On M2Crypto's generated docs您可以看到{public,private}{encrypt,decrypt}方法有一个padding选项,默认情况下是PKCS1,而符号menthod没有。在
我只要给它一个默认的M2Crypto参数,它可能会工作。在
相关问题 更多 >
编程相关推荐