я создаю сертификат x509 с помощью MakeCert со следующими параметрами:Создать сертификат x509 с OpenSSL/MakeCert инструмент
MakeCert -r -pe -n "CN = Client" -ss MyApp
Я хочу использовать этот сертификат для шифрования и расшифровки данных с помощью алгоритма RSA. Я смотрю на сгенерированный сертификат в хранилище сертификатов Windows, и все выглядит нормально (у него есть закрытый ключ, открытый ключ - RSA-ключ с 1024 бит и т. Д.)
Теперь я использую этот код 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 с сообщением «Bad key».
Я думаю, что код в порядке. Возможно, я не создаю сертификат должным образом. Любые комментарии?
---------------- EDIT --------------
Если кто-либо знает, как создать сертификат с использованием OpenSsl, это также действительный ответ для меня.
При создании своего сертификата какой бит пары частных/открытых ключей вы указываете? Возможно, вам нужно указать более длинные ключи 4048 бит? – berkay
Я не уверен, о чем вы говорите. Я просто использовал параметры, показанные выше в команде makecert. Если вы говорите об одном, предположите значение по умолчанию. Но мой открытый ключ имеет 1024 бита. –
okey, тогда я никогда не использую makecert, просто выполните поиск, чтобы создать его 4048 бит.1024 бит сломан по этой причине, вы можете получить ошибку. – berkay