Приведение закрытого ключа к RSACryptoServiceProvider не работает - PullRequest
0 голосов
/ 02 мая 2019

У меня есть переменная X509Certificate2, и я пытаюсь преобразовать закрытый ключ переменной в RSACryptoServiceProvider

RSACryptoServiceProvider pkey = (RSACryptoServiceProvider)cert.PrivateKey;

Однако я получаю это исключение.

Система.InvalidCastException: 'Невозможно привести объект типа' System.Security.Cryptography.RSACng 'к типу System.Security.Cryptography.RSACryptoServiceProvider'. '

Странно, что это происходит, потому что другие ответы в SOпредложил ту же процедуру, что и моя, но я получил исключение.Какие-нибудь решения для этого?

1 Ответ

1 голос
/ 02 мая 2019

Таким образом, после нескольких попыток и обсуждений в комментариях я нашел следующее решение:

            RSA rsa = (RSA)cert.PrivateKey;
        (cert.PrivateKey as RSACng).Key.SetProperty(
            new CngProperty(
                "Export Policy",
                BitConverter.GetBytes((int)CngExportPolicies.AllowPlaintextExport),
                CngPropertyOptions.Persist));

        RSAParameters RSAParameters = rsa.ExportParameters(true);                      

        AsymmetricCipherKeyPair keypair = DotNetUtilities.GetRsaKeyPair(RSAParameters);

Проблема заключалась в том, что переменная rsa не была экспортируемой.Чтобы изменить это, я установил новый CngProperty для политики экспорта.Отлично работает сейчас

...