Я создаю x509 сертификат с помощью makecert со следующими параметрами:
makecert-r-pe-n "CN=Client"-ss MyApp
Я хочу использовать этот сертификат, чтобы зашифровать и дешифровать данные с алгоритмом RSA. Я обращаюсь к сгенерированному сертификату в хранилище сертификатов окон, и все кажется хорошо (Это имеет закрытый ключ, открытый ключ является ключом RSA с 1 024 битами и так далее..)
Теперь я использую этот код C# для шифрования данных:
X509Store store = new X509Store("MyApp", StoreLocation.CurrentUser);
store.Open(OpenFlags.ReadOnly);
X509Certificate2Collection certs = store.Certificates.Find(X509FindType.FindBySubjectName, "Client", false);
X509Certificate2 _x509 = certs[0];
using (RSACryptoServiceProvider rsa = (RSACryptoServiceProvider)_x509.PublicKey.Key)
{
byte[] dataToEncrypt = Encoding.UTF8.GetBytes("hello");
_encryptedData = rsa.Encrypt(dataToEncrypt, true);
}
При выполнении Зашифровать метода я получаю CryptographicException с сообщением "Плохой ключ".
Я думаю, что код прекрасен. Вероятно, я не создаю сертификат правильно. Какие-либо комментарии?Спасибо
----------------РЕДАКТИРОВАНИЕ--------------
Если кто-либо знает, как создать использование сертификата OpenSsl, также действительный ответ для меня.
Чтобы разрешить использование ключа для шифрования, вы должны использовать -sky
-option . По умолчанию «makecert »использует спецификацию ключа AT_SIGNATURE, которая не работает с шифрованием / дешифрованием. Вместо этого попросите его использовать спецификацию AT_KEYEXCHANGE, введя следующую команду:
makecert -r -pe -n "CN=Client" -ss MyApp -sky Exchange
(Не забудьте удалить предыдущий ключ или использовать другое имя контейнера).