在 .NET Core C# 中使用证书加密和解密

Encrypt and decrypt using certificates in .NET Core C#

使用 C#,我希望能够使用证书解密数据。但是在 .NET Core (3.1) 中,我无法使用证书进行解密。有趣的是,它在 .NET Framework (4.8) 中运行良好。在 .NET Core 中,我可以找到并查看证书,但是当我尝试将其转换为 RSACryptoServiceProvider 时,结果始终是 NULL。当我做同样的事情时,在 .NET Framework 中完全没有问题。

我正在使用 makecert.exe 实用程序创建证书,如下所示:

makecert.exe -r -pe -n "CN=MyCert" -ss my -sr localmachine -eku 1.3.6.1.5.5.7.3.2 -len 2048 -e 01/01/2024 -sky Exchange C:\temp\MyCert.cer

.NET Core 中的证书有什么变化吗?还是我遗漏了什么?

X509Certificate2 myCert = null;
var store = new X509Store(StoreName.My, StoreLocation.LocalMachine);
store.Open(OpenFlags.ReadOnly);
var certCollection = store.Certificates.Find(X509FindType.FindByThumbprint, "72A5303B5CB3EF70BEC360E29FA5E9D86886EA44", false);
if (certCollection.Count == 1)
{
    myCert = certCollection[0];
}
else
{
    return;
}

var rsakey = (RSA)myCert.PrivateKey;
// In .NET Core rsp is always null
var rsp = (RSACryptoServiceProvider)rsakey;

我在类似的 Whosebug 问题中尝试了各种其他方法,但无济于事。

再见,根据 MSDN 示例 here 要在 .NET Core 3.1 中获取私钥,您必须调用 myCert.GetRSAPrivateKey().