使用python RSA加密SHA1

问题描述 投票:-2回答:1

我想在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);
python encryption rsa
1个回答
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私钥对象与签署。你必须为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)
© www.soinside.com 2019 - 2024. All rights reserved.