我想在python使用RSA SHA1加密加密的字符串。我有C#代码,我不知道它是如何在蟒蛇。如果可以,请你帮助我!
RSACryptoServiceProvider rsa = new RSACryptoServiceProvider();
rsa.FromXmlString(“<RSAKeyValue><Modulus>oQRshGhLf2Fh...”);
string data = "something";
byte[] signMain = rsa.SignData(Encoding.UTF8.GetBytes(data), new
SHA1CryptoServiceProvider());
sign = Convert.ToBase64String(signMain);
我想在这里使用的cryptography
project。它有full RSA signing support。请参阅替代选项cryptography section of the Hitchhiker's Guide to Python。
在.NET RSACryptoServiceProvider
对象doesn't let you set a padding algorithm,它总是使用PKCS1v15,所以选择在你的Python代码填充。
首先,我要convert that XML document to a PEM format这样你就可以load the public key from that format。我不知道,可直接加载.NET / XKMS 2.0 XML format任何Python库:
from cryptography.hazmat.backends import default_backend
from cryptography.hazmat.primitives import serialization
private_key_pem = b'-----BEGIN {format}-----\n...\n-----END {format}-----'
private_key = serialization.load_pem_private_key(
private_key_pem,
password=None,
backend=default_backend()
)
另外,具有Python XML parser你也许可以从XML文档中的数据馈送到RSAPublicNumbers()
和RSAPrivateNumbers()
对,然后使用RSAPrivateNumbers.private_key()
method产生RSA私钥对象与签署。你必须为Base64解码的XML数据,并使用convert from bytes to integer big endian byte ordering。
然后,您可以使用私钥来进行数字签名:
from base64 import b64encode
from cryptography.hazmat.primitives import hashes
from cryptography.hazmat.primitives.asymmetric import padding
data = "something"
signature = private_key.sign(data.encode('utf8'), padding.PKCS1v15(), hashes.SHA1())
signature_base64 = b64encode(signature)