2017-02-01 16 views
0

В документе я увидел код ниже:Что такое эквивалентный код python для RSA.SignData в .NET?

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 закодировать его. Он считывает ключ RSA из XML.

Код я использовал для подписи данных в 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. Это не работает так, как я хотел. Как я могу точно преобразовать код .NET в python? Что здесь, что я делаю неправильно.

ответ

0

Ваш Python говорит, что вы использовали SHA-2-256 (SHA256.new()), а в .NET вы использовали SHA-1 (-160) (new SHA1CryptoServiceProvider()). Предполагается, что это будет эквивалентно, если вы используете тот же алгоритм с обеих сторон.

+0

Я использовал SHA1, но результат был другим. – ALH