如何使用特定的填充技术使用M2Crypto在python中对文档进行签名?

如何使用特定的填充技术使用M2Crypto在python中对文档进行签名?,python,cryptography,digital-signature,m2crypto,Python,Cryptography,Digital Signature,M2crypto,我需要使用存储在.pem文件中的私钥对python中的一些文本进行数字签名。现在似乎M2Crypto是做这件事的首选方式,所以这就是我正在使用的。我想我得到了大部分,但我对如何配置填充感到困惑。具体来说,我需要在iPhone应用程序中验证签名,使用名为kSecPaddingPKCS1SHA1的填充方案,如下所述: 要签名的数据是SHA1哈希。 将完成标准ASN.1填充,以及底层RSA操作的PKCS1填充 我不是密码专家,我对这意味着什么只有一个模糊的概念。我试图查看一些RFC,但发现它们无法穿透

我需要使用存储在.pem文件中的私钥对python中的一些文本进行数字签名。现在似乎M2Crypto是做这件事的首选方式,所以这就是我正在使用的。我想我得到了大部分,但我对如何配置填充感到困惑。具体来说,我需要在iPhone应用程序中验证签名,使用名为
kSecPaddingPKCS1SHA1
的填充方案,如下所述:

要签名的数据是SHA1哈希。 将完成标准ASN.1填充,以及底层RSA操作的PKCS1填充

我不是密码专家,我对这意味着什么只有一个模糊的概念。我试图查看一些RFC,但发现它们无法穿透。我看到RSA对象的加密/解密方法采用填充类型,但我没有看到与签名验证相关的任何类似内容

任何帮助,尤其是代码方面的帮助,都将不胜感激

(从某种意义上说,这是与之相反的。)


好的,下面给出的答案是正确的。以下代码为
text
生成签名,该签名使用
kSecPaddingPKCS1SHA1
填充方案在iPhone上进行验证

from M2Crypto import EVP
privkey = EVP.load_key("privkey.pem")
privkey.sign_init()
privkey.sign_update(text)
signature = privkey.sign_final()

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

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

PKCS1填充是默认设置

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

您可以看到{public,private}{encrypt,decrypt}方法有一个padding选项,默认情况下是PKCS1,而sign-menthod没有


我只想尝试一下默认的M2Crypto参数,它可能会工作。

相反,正确的填充对于使用RSA的安全签名系统是绝对必要的。