Исключение «неверный ключ» для сертификатов с экспортируемым закрытым ключом - PullRequest
14 голосов
/ 10 января 2010

Я пытаюсь зашифровать, а затем расшифровать файлы с использованием асимметричного шифрования. Я создал тестовый сертификат с помощью makecert и установил его в свой личный магазин локальной машины. В будущем мне придется установить этот сертификат на нескольких серверах, поэтому я создал его с флагом «-pe», то есть с экспортируемым закрытым ключом. Сертификаты были успешно созданы и установлены, я вижу сообщение "У вас есть закрытый ключ, соответствующий этому сертификату" в mmc.

Теперь я пытаюсь зашифровать данные с помощью RSACryptoServiceProvider в .NET 3.5. И это удается. Но когда я пытаюсь расшифровать его, я получаю исключение «Плохой ключ».

Если я создаю сертификат без опции "-pe", этот же код хорошо работает для расшифровки. Вот код:

RSA rsaKey = (RSA)myCertificate.PrivateKey;
RSACryptoServiceProvider rsaCsp = (RSACryptoServiceProvider)rsaKey;
byte[] plainText = rsaCsp.Decrypt(encryptedText, true);

Также я попробовал другой метод, используя пространство имен System.Security.Cryptography.Pkcs:

EnvelopedCms envelope = new EnvelopedCms();
envelope.Decode(encryptedText);
envelope.Decrypt();
byte[] plainText = envelope.ContentInfo.Content;

Результат был таким же ... Кто-нибудь может помочь?

1 Ответ

25 голосов
/ 06 июня 2012

Убедитесь, что ключ, который вы используете, был создан с "-sky Exchange" при использовании makecert.exe. Без этого вы можете использовать ключ только для подписи и аутентификации, но не для шифрования / дешифрования, который вы используете здесь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...