使用带有ECC公钥的X509Certificate2加载证书

时间:2015-09-30 19:08:51

标签: .net c#-4.0 .net-4.5 public-key-encryption x509certificate2

这是一个新手问题。我正在尝试使用以下方式加载.der证书:

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

但我在第二行收到“不支持证书密钥算法”错误。当我将此证书导入MMC时,我可以看到像this这样的公钥。

有效吗?我如何在代码中获取它?

1 个答案:

答案 0 :(得分:3)

在.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);
    }
}