.NET Private Key Rsa Encryption
Solution 1
You should be aware of the Bouncycastle C# library. There are in particular two very useful classes: Org.BouncyCastle.OpenSsl.PemReader
which will convert from the openssl style key you have to a bouncycastle key object, and Org.BouncyCastle.Security.DotNetUtilities
, which will convert a bouncycastle key to a .NET RSAParameters
object.
Here is a tiny bit of untested code that shows how to use it
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);
}
}
}
Solution 2
I guess that is what are you looking for:
// 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;
}
To generate a new key, you can use RSACryptoServiceProvider.ExportParameters method.
Refer to the following:
Related videos on Youtube
Steve Kiss
Updated on July 09, 2022Comments
-
Steve Kiss almost 2 years
I need to encrypt a string using an RSA 1.5 algorithm. I have been provided with a private key. However, I cannot for the life of me figure out how to add this key to the class. It seems as tho the key needs to be of type RSAParameter stuct. However this requires a set of values I have not been given such as Modulus, Exponent, P, Q, etc.. All I have is the private key. Can anyone help?
-
Steve Kiss about 13 yearsThe key I have been provided looks like -----BEGIN RSA PRIVATE KEY-----MIIadfdafCXdfawIBAAKBgQCIgynd6pvlCF= -----END RSA PRIVATE KEY----- -----BEGIN PUBLIC KEY-----jaz+wadfadIDAQAB -----END PUBLIC KEY----- This is all I have..
-
-
Steve Kiss about 13 yearsThank you!! This is exactly what I needed.
-
MattyP almost 12 yearsI've been looking in a lot of places for exactly this... Thanks!
-
C0D3 about 11 yearsI need this exact thing to be done in Java. When I use the pr.readObject() it is returning PEMKeyPair and throwing an exception when I cast it to AsymmetricCipherKeyPair. I cannot figure out why for the life of me. Please help!
-
mikerobi over 9 yearsRaises an InvalidCastException for me.
-
President James K. Polk over 9 years@mikerobi: Are you sure your keyfile contains a private key?
-
monty over 4 yearsfor those using Bouncy Castle under Linux/Docker: github.com/bcgit/bc-csharp/issues/160