我使用的 .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);