Как правильно расшифровать данные RSA в C # .NET? - PullRequest
2 голосов
/ 29 августа 2009

Мой сервер создает RSACryptoServiceProvider и экспортирует его параметры в переменную (RSAKeyInfo).

Затем открытый ключ отправляется клиенту, и клиент что-то шифрует этим открытым ключом.

Теперь мне нужно иметь возможность дешифровать эти самые данные при отправке обратно на сервер, поэтому в моем случае полезен RSA.

Однако при попытке воссоздать RSACryptoServiceProvider с импортированными параметрами из первого RSACryptoServiceProvider, созданного ранее, я получаю исключение «неверные данные».

... Код может быть понятнее.

Создание криптографии:

class Cryptograph
{
    public Cryptograph()
    {
        this.RSAKeyInfo = new RSACryptoServiceProvider(2048, new CspParameters(1)).ExportParameters(true);
    }
}

Доступ к нему позже для расшифровки:

byte[] encrypted = ...;

RSACryptoServiceProvider rsa = new RSACryptoServiceProvider();
rsa.ImportParameters(this.Cryptograph.RSAKeyInfo);

byte[] decrypted = rsa.Decrypt(encrypted, false);
Console.WriteLine(Utilities.ByteArrayToHexString(decrypted));

Я получаю исключение "Bad Data" в этой строке:

byte[] decrypted = rsa.Decrypt(encrypted, false);

Что я делаю не так? Как я могу сделать это правильно? Спасибо:)

P.S .: Пожалуйста, не отправляйте MSDN или явные ссылки на результаты Google, я прочитал все эти страницы и до сих пор не могу заставить его работать.

Ответы [ 2 ]

3 голосов
/ 29 августа 2009

Когда что-то зашифровано с помощью открытого ключа, вам необходимо использовать закрытый ключ для расшифровки. Я не вижу, где вы используете закрытый ключ для расшифровки.

Я понимаю, что вы уже прочитали это, но вы можете прочитать страницу шифрования и эту страницу расшифровки и убедиться, что вы выполняете следующие шаги: http://msdn.microsoft.com/en-us/library/te15te69.aspx

Если вы не шифруете очень короткие сообщения, такие как пароль, шифрование RSA обычно следует использовать для шифрования симметричного ключа, который быстрее шифрует / дешифрует более длинные сообщения.

Размер того, что вы можете зашифровать с помощью открытого ключа, зависит от длины ключа.

0 голосов
/ 09 сентября 2009

Мне нужно было шифрование / дешифрование, в котором не использовалось заполнение, и C # .NET не предоставляет его по умолчанию. OpenSSL.NET сделает эту работу, однако я застрял, пытаясь ее использовать. ( См. Этот вопрос, если хотите помочь мне заставить его работать ). (

...