如何将私钥从X509Certificate2导入到NET 4.5.1上的CngKey中

时间:2019-01-16 15:43:01

标签: c# pkcs#12 diffie-hellman ecdh

我正在使用的.NET版本(4.5.1)在X509Certificate2中没有GetCngPrivateKey()方法。我找不到任何作品。

不幸的是,我正在使用的.NET版本无法协商。

我正在尝试将类似的东西拉出来:

X509Certificate2 cert = new X509Certificate2(@"alice.p12", "password", X509KeyStorageFlags.MachineKeySet | X509KeyStorageFlags.Exportable);
CngKey ck = CngKey.Import(cert.PrivateKey) // Fake line - not possible this way
using (var alice = new ECDiffieHellmanCng(ck))
{
    // ...
}

同样,我没有可用的方法,例如GetCngPrivateKey(),HasCngKey(),GetRSAPrivateKey()等。

*更新* 所有这些导入尝试均失败,但有以下例外:

RSACryptoServiceProvider rsa = cert.PrivateKey as RSACryptoServiceProvider;
var cspBlob = rsa.ExportCspBlob(true);
CngKey a = CngKey.Import(cspBlob, CngKeyBlobFormat.EccPrivateBlob);
CngKey a = CngKey.Import(cspBlob, CngKeyBlobFormat.GenericPrivateBlob);
cspBlob = rsa.ExportCspBlob(false);
CngKey a = CngKey.Import(cspBlob, CngKeyBlobFormat.EccPrivateBlob);
CngKey a = CngKey.Import(cspBlob, CngKeyBlobFormat.GenericPrivateBlob);

0 个答案:

没有答案