我必须转换以下dotnet框架代码以在dotnet核心中生成RSA公钥和私钥。
RSACryptoServiceProvider RSA = new RSACryptoServiceProvider();
string publicKey = RSA.ToXmlString(false);
string privateKey = RSA.ToXmlString(true);
Dotnet Core不支持ABove代码,并抛出以下错误:
发生异常:CLR / System.PlatformNotSupportedException 类型“ System.PlatformNotSupportedException”的未处理异常 发生在System.Security.Cryptography.Algorithms.dll中:“操作为 此平台不支持。”在 System.Security.Cryptography.RSA.ToXmlString(布尔 includePrivateParameters)
解决方案:以下扩展程序对我有用
public static class RSACryptoServiceProviderExtensions
{
public static void ToXmlFile(this RSA rsa, bool includePrivateParameters, string xmlFilePath)
{
RSAParameters parameters = rsa.ExportParameters(includePrivateParameters);
File.WriteAllText(xmlFilePath,
string.Format("<RSAKeyValue><Modulus>{0}</Modulus><Exponent>{1}</Exponent><P>{2}</P><Q>{3}</Q><DP>{4}</DP><DQ>{5}</DQ><InverseQ>{6}</InverseQ><D>{7}</D></RSAKeyValue>",
parameters.Modulus != null ? Convert.ToBase64String(parameters.Modulus) : null,
parameters.Exponent != null ? Convert.ToBase64String(parameters.Exponent) : null,
parameters.P != null ? Convert.ToBase64String(parameters.P) : null,
parameters.Q != null ? Convert.ToBase64String(parameters.Q) : null,
parameters.DP != null ? Convert.ToBase64String(parameters.DP) : null,
parameters.DQ != null ? Convert.ToBase64String(parameters.DQ) : null,
parameters.InverseQ != null ? Convert.ToBase64String(parameters.InverseQ) : null,
parameters.D != null ? Convert.ToBase64String(parameters.D) : null)
);
}
}
答案 0 :(得分:0)
RSACryptoServiceProvider
。我认为您仍然可以在安装了软件包System.Security.Cryptography.Algorithms的情况下使用它。
另一种方法是使用RSA
基类,引用implement RSA in .NET core:
.NET Core
using (RSA rsa = RSA.Create())
{
rsa.KeySize = desiredKeySizeInBits;
// when the key next gets used it will be created at that keysize.
DoStuffWithThePrivateKey(rsa);
}