DotNetCore: генерация закрытых / открытых ключей RSA - PullRequest
0 голосов
/ 04 марта 2019

Мне нужно преобразовать приведенный ниже код структуры dotnet для генерации открытых и закрытых ключей RSA в ядре dotnet.

RSACryptoServiceProvider RSA = new RSACryptoServiceProvider();
string publicKey = RSA.ToXmlString(false);
string privateKey = RSA.ToXmlString(true);

Вышеуказанный код не поддерживается в Dotnet Core и выдает ошибку ниже:

Произошло исключение: CLR / System.PlatformNotSupportedException Произошло необработанное исключение типа «System.PlatformNotSupportedException» в System.Security.Cryptography.Algorithms.dll: «Операция не поддерживается на этой платформе.»at System.Security.Cryptography.RSA.ToXmlString (Boolean 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)  
                  );  
        }  
    }

1 Ответ

0 голосов
/ 04 марта 2019

RSACryptoServiceProvider не рекомендуется.Я думаю, что вы все еще можете использовать его с установленным пакетом System.Security.Cryptography.Algorithms .

Другой способ - использовать базовый класс RSA, ссылаясь на , реализующий RSA в.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);
}
...