.NET中RSA.SignData的等效python代码是什么?

时间:2017-02-01 07:34:41

标签: python .net rsa sha1

在文档中,我看到了以下代码:

RSACryptoServiceProvider rsa = new RSACryptoServiceProvider();
rsa.FromXmlString(“<RSAKeyValue><Modulus>oQRshGhLf2Fh...”);

byte[] signMain = rsa.SignData(Encoding.UTF8.GetBytes(data), new
                     SHA1CryptoServiceProvider());
sign = Convert.ToBase64String(signMain);

它似乎首先使用RSASHA1签署数据,然后base64对其进行编码。它从XML读取RSA密钥。

我用于在python中签名数据的代码如下:

key = open('priv_key.pem', "r").read()
rsakey = RSA.importKey(key)
signer = PKCS1_v1_5.new(rsakey)
digest = SHA256.new()
digest.update(data)
sign = signer.sign(digest)

首先,我将XML转换为PEM,然后使用上面的代码对数据进行签名。

问题是.NET转换的输出与Python中的输出不同。它不按我想要的方式工作。我怎么能在python中准确转换.NET代码?我在做什么,我做错了。

1 个答案:

答案 0 :(得分:0)

您的Python说您使用了SHA-2-256(SHA256.new()),而在.NET中您使用了SHA-1(-160)(new SHA1CryptoServiceProvider())。如果你在双方使用相同的算法,人们会认为这是等价的。