Загрузите сертификат, используя X509Certificate2 с открытым ключом ECC

Это вопрос новичка. Я пытаюсь загрузить сертификат.der с помощью:

X509Certificate2 cert = new X509Certificate2(@"c:\temp\mycert.der");
RSACryptoServiceProvider csp = (RSACryptoServiceProvider)cert.PublicKey.Key

Но я получаю ошибку "Алгоритм ключа сертификата не поддерживается" во 2-й строке. Когда я импортирую этот сертификат в MMC, я вижу открытый ключ, например этот,

Это действительно? Как мне получить это в коде?

1 ответ

До.NET 4.6.1 ключи ECDSA не поддерживались. По причинам наследства / совместимости (например, здесь приведен пример, где вы конвертируете в RSACryptoServiceProvider), свойство PublicKey.Key и свойство X509Certificate2.PrivateKey по-прежнему не могут ECDSA. Вместо этого есть новый, более безопасный для типов путь:

using (ECDsa ecdsa = cert.GetECDsaPublicKey())
{
    if (ecdsa != null)
    {
        // I had to do something with it in this example...
        bool verified = ecdsa.VerifyData(data, signature, HashAlgorithmName.SHA256);
    }
}
Другие вопросы по тегам