.net core DotNetCore:生成RSA私钥/公钥

.net core DotNetCore:生成RSA私钥/公钥,.net-core,rsa,.net Core,Rsa,我必须转换下面的dotnet框架代码,以在dotnet core中生成RSA公钥和私钥 RSACryptoServiceProvider RSA = new RSACryptoServiceProvider(); string publicKey = RSA.ToXmlString(false); string privateKey = RSA.ToXmlString(true); Dotnet Core不支持上述代码,并引发以下错误: 发生异常:CLR/System.PlatformNotS

我必须转换下面的dotnet框架代码,以在dotnet core中生成RSA公钥和私钥

RSACryptoServiceProvider RSA = new RSACryptoServiceProvider();
string publicKey = RSA.ToXmlString(false);
string privateKey = RSA.ToXmlString(true);
Dotnet Core不支持上述代码,并引发以下错误:

发生异常:CLR/System.PlatformNotSupportedException An “System.PlatformNotSupportedException”类型的未处理异常 在System.Security.Cryptography.Algorithms.dll中发生:'操作已停止 此平台上不支持。'at System.Security.Cryptography.RSA.ToXmlString(布尔值) 包括专用参数)

解决方案:下面的扩展对我有用

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)  
                  );  
        }  
    }
公共静态类RSACryptServiceProviderExtensions
{
公共静态void ToXmlFile(此RSA、bool includePrivateParameters、字符串xmlFilePath)
{  
RSAParameters=rsa.ExportParameters(包括PrivateParameters);
writealText(xmlFilePath,
string.Format(“{0}{1}

{2}

{3}{4}{5}{6}{7}”, parameters.module!=null?Convert.ToBase64String(parameters.module):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) ); } }
不建议使用RSACryptoServiceProvider
。我想你仍然可以在安装了软件包的情况下使用它

另一种方法是使用
RSA
基类,参考:

.NET核心

使用(RSA=RSA.Create())
{
rsa.KeySize=desiredKeySizeInBits;
//当下一个密钥被使用时,它将以该密钥大小创建。
与私人公司(rsa)合作的Dostuff;
}

ToXmlString
在.NET Core()中不受支持。感谢您的回复。我已经解决了这个问题。