У меня есть код в c#.
public string GetSign(string data)
{
var cs = new CspParameters { KeyContainerName = "PaymentTest" };
var rsa = new RSACryptoServiceProvider(cs) { PersistKeyInCsp = false };
rsa.Clear();
rsa = new RSACryptoServiceProvider();
rsa.FromXmlString("<RSAKeyValue><Modu-
lus>My RSA Private Key</RSAKeyValue>");
byte[] signMain = rsa.SignData(Encoding.UTF8.GetBytes(data), new
SHA1CryptoServiceProvider());
string sign = Convert.ToBase64String(signMain);
return sign;
}
Я хочу реализовать этот код в django. В этом коде используется SHA1. Я реализовал это в python с SHA256, но результат не тот же.
from Crypto.PublicKey import RSA
from Crypto.Cipher import PKCS1_v1_5 as Cipher_PKCS1_v1_5
from Crypto.Signature import PKCS1_v1_5
from base64 import b64decode, b64encode
def sign_data(data, private_key_path):
from Crypto.Hash import SHA256
message = b64encode(bytes(data, 'utf8'))
digest = SHA256.new()
digest.update(message)
private_key = False
logger.info(private_key_path)
with open(private_key_path, "r") as key_file:
private_key = RSA.importKey(key_file.read())
signer = PKCS1_v1_5.new(private_key)
sig = signer.sign(digest)
sig = b64encode(sig)
return sig
Я изменил SHA256 на SHA1, но это дает мне ошибку:
File "/home/kamiar/.pyenv/versions/3.6.8/lib/python3.6/site-packages/Crypto/Util/asn1.py", line 211, in encode
raise ValueError("Trying to DER encode an unknown object")
Я не знаю, в чем моя проблема. Кто-нибудь может мне помочь?