Секретный ключ .NET Rsa шифрование - PullRequest
11 голосов
/ 17 мая 2011

Мне нужно зашифровать строку, используя алгоритм RSA 1.5. Мне был предоставлен закрытый ключ. Однако я не могу понять, как добавить этот ключ в класс. Кажется, что ключ должен быть типа RSAParameter stuct. Однако это требует набора значений, которые мне не были даны, таких как модуль, экспонента, P, Q и т. Д. Все, что у меня есть, - это закрытый ключ. Кто-нибудь может помочь?

Ответы [ 2 ]

26 голосов
/ 18 мая 2011

Вам следует знать о библиотеке Bouncycastle C # . В частности, есть два очень полезных класса: Org.BouncyCastle.OpenSsl.PemReader, которые преобразуют из имеющегося у вас ключа стиля openssl в объект ключа bouncycastle, и Org.BouncyCastle.Security.DotNetUtilities, который преобразует ключ bouncycastle в объект .NET RSAParameters.

Вот небольшой кусочек непроверенного кода, который показывает, как его использовать

using System;
using System.IO;
using System.Security.Cryptography;
using Org.BouncyCastle.OpenSsl;
using Org.BouncyCastle.Crypto;
using Org.BouncyCastle.Security;
using Org.BouncyCastle.Crypto.Parameters;

namespace RSAOpensslToDotNet
{
    class Program
    {
        static void Main(string[] args)
        {
            StreamReader sr = new StreamReader("../../privatekey.pem");
            PemReader pr = new PemReader(sr);
            AsymmetricCipherKeyPair KeyPair = (AsymmetricCipherKeyPair)pr.ReadObject();
            RSAParameters rsa = DotNetUtilities.ToRSAParameters((RsaPrivateCrtKeyParameters)KeyPair.Private);
        }
    }
}
5 голосов
/ 17 мая 2011

Я думаю, это то, что вы ищете:

    // Import ASymmetric RSA Key from a system file.
    public static RSAParameters ImportRSAKey(String fileName)
    {

        // Create a stream to a the specified system file.
        Stream fileStream = new FileStream(fileName, FileMode.Open, FileAccess.Read);

        // Extract/Deserialize the key from the file.
        IFormatter soapFormatter = new SoapFormatter();            
        RSAParameters rsaParameter = 
           (RSAParameters) soapFormatter.Deserialize(fileStream);

        // Close the file stream.
        fileStream.Close();

        return rsaParameter;

    }

Чтобы создать новый ключ, вы можете использовать RSACryptoServiceProvider.ExportParameters метод.


См. Следующее:

Структура параметров RSAP

...