在文档中,我看到了以下代码:
RSACryptoServiceProvider rsa = new RSACryptoServiceProvider();
rsa.FromXmlString(“<RSAKeyValue><Modulus>oQRshGhLf2Fh...”);
byte[] signMain = rsa.SignData(Encoding.UTF8.GetBytes(data), new
SHA1CryptoServiceProvider());
sign = Convert.ToBase64String(signMain);
它似乎首先使用RSA
和SHA1
签署数据,然后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
代码?我在做什么,我做错了。
答案 0 :(得分:0)
您的Python说您使用了SHA-2-256(SHA256.new()
),而在.NET中您使用了SHA-1(-160)(new SHA1CryptoServiceProvider()
)。如果你在双方使用相同的算法,人们会认为这是等价的。