Перенос кода с С++ на С# — шифрование с помощью закрытого ключа RSA PKCS#1

Я пытаюсь перенести этот фрагмент кода с С++ на С#:

...
strPrivateKey = "someBase64EncodedPrivateKey";
long sizeKey = DecodeBase64(strPrivateKey, pKey);
const unsigned char* _pKey = pKey;
d2i_RSAPrivateKey(&pRSA, &_pKey, sizeKey);
...

RSA_private_encrypt(sizeOfMessage, pMessage, pSignature, pRSA, RSA_PKCS1_PADDING);

...

Пока вот мой код:

var strPrivateKey = "someBase64EncodedPrivateKey";
var bytes = Convert.FromBase64String(strPrivateKey);

var rsa = new RSACryptoServiceProvider();

// How to set the private key to the rsa object?!

byte[] someDataToEncrypt = /* Set the data to encrypt */;
var encryptedData = rsa.Encrypt(someDataToEncrypt, false);

РЕДАКТИРОВАТЬ: я никогда не уверен, что это тот класс, на который я должен ссылаться.

Спасибо


person Pierre-Luc Champigny    schedule 06.05.2011    source источник


Ответы (2)


RSAParameters (http://msdn.microsoft.com/en-us/library/system.security.cryptography.rsaparameters.aspx) можно передать классу RSACryptoServiceProvider с помощью тега ImportParameters. Вы можете закодировать ключ в структуре RSAParameters.

person Aurojit Panda    schedule 06.05.2011

Исправил, добавив:

At the begin of the private key: "-----BEGIN RSA PRIVATE KEY-----\r\n"
After each line of my private key : "\r\n"
At the end of my private key: "-----END RSA PRIVATE KEY-----"

И, наконец, в качестве библиотеки я использовал OpenSsl.NET. Этот пост первоначально решил мою проблему: Расшифровка RSA с использованием OpenSSL.NET с существующим ключом

person Pierre-Luc Champigny    schedule 29.08.2011