相关疑难解决方法(0)

如何验证Python中的RSA SHA1签名?

我有一个字符串,一个签名和一个公钥,我想验证字符串上的签名.关键看起来像这样:

-----BEGIN PUBLIC KEY-----
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDfG4IuFO2h/LdDNmonwGNw5srW
nUEWzoBrPRF1NM8LqpOMD45FAPtZ1NmPtHGo0BAS1UsyJEGXx0NPJ8Gw1z+huLrl
XnAVX5B4ec6cJfKKmpL/l94WhP2v8F3OGWrnaEX1mLMoxe124Pcfamt0SPCGkeal
VvXw13PLINE/YptjkQIDAQAB
-----END PUBLIC KEY-----
Run Code Online (Sandbox Code Playgroud)

我已经阅读了一段时间的pycrypto文档,但我无法弄清楚如何使用这种密钥制作RSAobj.如果您了解PHP,我正在尝试执行以下操作:

openssl_verify($data, $signature, $public_key, OPENSSL_ALGO_SHA1);
Run Code Online (Sandbox Code Playgroud)

另外,如果我对任何术语感到困惑,请告诉我.

python cryptography sha1 rsa signature

29
推荐指数
2
解决办法
2万
查看次数

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)
Run Code Online (Sandbox Code Playgroud)

代码2:

pkey = RSA.load_key("mykey.pem")
signature = pkey.sign(hashlib.sha1(text).digest())
print base64.b64encode(signature)
Run Code Online (Sandbox Code Playgroud)

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

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
Run Code Online (Sandbox Code Playgroud)

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

python digital-signature m2crypto

5
推荐指数
1
解决办法
2872
查看次数