如何使用特殊的填充技术用M2Crypto在python中签署文档?

2024-10-01 07:46:41 发布

您现在位置:Python中文网/ 问答频道 /正文

我需要使用存储在.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()

(很抱歉发表社论,但我能说密码黑客是世界上最糟糕的文档作者之一吗?)在


Tags: 方法代码text密码as方案bepem
1条回答
网友
1楼 · 发布于 2024-10-01 07:46:41

AFAIK M2Crypto在需要的地方添加填充。在

默认为PKCS1 padding。在

但是,(同样是AFAIK),签名没有填充,填充只是添加到加密数据中以防止可能的攻击。
编辑:用户caf在一条评论中说,填充对于一个好的签名是必不可少的。我仍然建议您尝试使用默认的M2Crypto行为,它可能会添加它。在

On M2Crypto's generated docs您可以看到{public,private}{encrypt,decrypt}方法有一个padding选项,默认情况下是PKCS1,而符号menthod没有。在

我只要给它一个默认的M2Crypto参数,它可能会工作。在

相关问题 更多 >