在 .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()
.
使用 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()
.