Мне нужно зашифровать строку, используя алгоритм RSA 1.5. Мне предоставлен секретный ключ. Тем не менее, я не могу для жизни меня выяснить, как добавить этот ключ в класс. Кажется, что ключ должен быть типа RSAParameter stuct. Однако для этого требуется набор значений, которые мне не были предоставлены, такие как Modulus, Exponent, P, Q и т.д. Все, что у меня есть, - это закрытый ключ. Может ли кто-нибудь помочь?
Шифрование привилегированного ключа .NET Private Key
Ответ 1
Вы должны знать о Bouncycastle С# library. Есть, в частности, два очень полезных класса: 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);
}
}
}
Ответ 2
Я думаю, это то, что вы ищете:
// 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.
Обратитесь к следующему: