python - M2crypto 签名 "algorithm"

标签 python digital-signature m2crypto

这两个代码提供相同的签名,这是预期的:

代码1:

from M2Crypto import RSA, EVP
import base64, hashlib

text = "some text"

pkey = EVP.load_key("mykey.pem")  #"mykey.pem" was generated as: openssl genrsa -des3 -out mykey.pem 2048
pkey.sign_init()
pkey.sign_update(text)
signature = pkey.sign_final()
print base64.b64encode(signature)

代码2:

pkey = RSA.load_key("mykey.pem")
signature = pkey.sign(hashlib.sha1(text).digest())
print base64.b64encode(signature)

但是,如果我想“模仿”签名算法,即用私钥加密摘要,我会得到不同的签名,即:

pkey = RSA.load_key("mykey.pem")
signature = pkey.private_encrypt(hashlib.sha1(text).digest(), RSA.pkcs1_padding)
print base64.b64encode(signature)  #different from the two above

您能解释一下吗?后一种签名方式有什么问题?

最佳答案

我认为不同之处在于 RSA_sign 对摘要 PKCS1 algorithmIdentifier 和摘要数据进行签名,而 RSA_private_encrypt 仅对摘要数据进行签名。

来自 RSA_private_encrypt 手册页:

RSA_PKCS1_PADDING
    PKCS #1 v1.5 padding. This function does not handle the
    algorithmIdentifier specified in PKCS #1. When generating or
    verifying PKCS #1 signatures, RSA_sign(3) and RSA_verify(3) should
    be used.

关于python - M2crypto 签名 "algorithm",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5663084/

相关文章:

digital-signature - 如何在Java Card 2.2.1上实现SHA256?

java - Java中获取数字签名的私钥

macos - 在 OS X/macOS 上使用 pip 安装 m2crypto 时遇到问题

python - 使用 pandas 进行插补

python - 在 python3 中使用 json.dump 无效的 Json

python - 无法从 Django Rest API 获取图像

pdf - 通过 Web 应用程序自动化 PDF 签名

python 如何在Windows系统中构建scrapy.exe、pip.exe、virtualenv.exe等exe文件?

java - 从 Jython 中引用 M2Crypto

python - 在 python 中获取 PKCS7 签名者链