我在.NET 4.5中有一个现有的应用程序,我使用X509Certificate2
私钥和公钥。我正在将其迁移到.net核心。我没有得到如何将私钥和公钥值读入XML格式。我在.NET 4.5中有以下代码
var PublicKey = certificate.PublicKey.Key.ToXmlString(false);
var PrivateKey = certificate.PrivateKey.ToXmlString(true);
如何在删除PrivateKey
属性的.net核心中实现相同的功能?
我知道要转换为XML字符串的ImportParameters
和ExportParameters
方法。但我正在查看的是访问PublicKey.Key
和PrivateKey
属性,这些属性可以获取AsymmetricAlgorithm
对象,该对象可以转换为RSACrypoServiceProvider。
在.netCore中有方法GetRSAPublicKey
和GetRSAPrivateKey
,它们返回RSACng
个对象。使用此证书的应用程序的另一端使用RSACryptoServiceProvider
验证数据。
答案 0 :(得分:1)
X509Certificate2.PrivateKey
和PublicKey.Key
并未完全转移到.NET Core,因为每个人都将它们转换为RSACryptoServiceProvider
。当你在Windows上获得RSACng
时,它在Linux上是RSAOpenSsl
。
您应该只更改RSA
的所有类型引用,因为.NET 4.6(和.NET Core 1.0)更正了RSA基类以公开所有必需的签名/验证//加密/解密方法
.NET Core无法读取或写入XML格式的密钥。即使这些方法再次存在于.NET Core 2.0中,它们也会抛出PlatformNotSupportedException
,因为存在循环依赖:
如果您需要非对称密钥的XML序列化,则需要将其写入您自己的库中。