2

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

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

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

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

(在某种意义上,这是这个问题的反面。)


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

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

(抱歉发表社论,但我可以说加密黑客是宇宙中最糟糕的文档作者吗?)

4

1 回答 1

2

AFAIK M2Crypto adds padding where it's required.

PKCS1 padding is the default.

But, (again only AFAIK), signatures don't have padding, padding is only added to encrypted data to prevent a possible attack.
EDIT: user caf, in a comment says that a padding is essnetial to a good signature. I'm still recommending you try it with the default M2Crypto behavior, it might add it.

On M2Crypto's generated docs you can see that the {public,private}_{encrypt,decrypt} methods have a padding option, which is PKCS1 by default, while the sign menthod has none.

IMO just give it a shot with the default M2Crypto params, it will probably work.

于 2009-11-05T00:58:34.740 回答