将我的一个项目从.NET Framework 4.6迁移到.NET Core 3.0时,我发现其中一行代码在新框架中不起作用:
X509Certificate2 clientCert;
var csp = (RSACryptoServiceProvider)clientCert.PublicKey.Key;
在.NET Framework中,此代码工作正常,但是,在.NET Core中,它仅引发了一个异常,指出“ System.Security.Cryptography.RSACng无法转换为System.Security.Cryptography.RSACryptoServiceProvider”。
我试图通过将密钥投射到RSACng来解决该错误:
X509Certificate2 clientCert;
var csp = (RSACng)clientCert.PublicKey.Key;
但是,VS2019告诉我,在名称空间“ System.Security.Cryptography”中找不到RSACng。这很奇怪,因为documentation说RSACng属于名称空间。
最后我通过以下方式解决此问题:
var csp = clientCert.GetRSAPublicKey();
所以我的问题是
.NET Core和.NET Framework之间的X509Certificate2.PublicKey.Key的实际类型是否有区别?
为什么不能在.NET Core中使用RSACng?