rsa sha1使用python加密

时间:2019-02-04 11:52:01

标签: python encryption rsa

我想在python中使用Rsa Sha1加密来加密字符串。我有C#代码,但我不知道它在python中如何。请帮我!

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);

1 个答案:

答案 0 :(得分:1)

我会在这里使用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私有数据要签名的关键对象。您必须对XML数据进行base64解码,然后使用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)