Click here to Skip to main content
15,881,898 members
Please Sign up or sign in to vote.
0.00/5 (No votes)
See more:
I have generated RSA public and private key in my application and I want to stor it into two different files. Can anyone help me?

What I have tried:

C#
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
using Org.BouncyCastle.Crypto;
using Org.BouncyCastle.Security;
using Org.BouncyCastle.Crypto.Parameters;
using Org.BouncyCastle.OpenSsl;
using Org.BouncyCastle.Crypto.Generators;
using Org.BouncyCastle.Crypto.Encodings;
using Org.BouncyCastle.Crypto.Engines;
using System.Xml;

namespace RSAKeyGeneration
{
    class Program
    {
        static void Main(string[] args)
        {
            // Declaring Variables //
            string SourceData;
            byte[] tmpSource;

            // Enter your Message Text //
            Console.WriteLine("Enter the Message you want to Encrypt");
            SourceData = Console.ReadLine();


            //Create a byte array from Source data
            tmpSource = ASCIIEncoding.ASCII.GetBytes(SourceData);
            Console.WriteLine();
            Console.WriteLine();
            Console.WriteLine(" Key pair is generating....Please wait for while");
            Console.WriteLine();

            //RSA key pair Generator generates the RSA kay pair based on the Random Number and the strength of key required 
            RsaKeyPairGenerator rsaKeyPairGenerator = new RsaKeyPairGenerator();
            rsaKeyPairGenerator.Init(new KeyGenerationParameters(new SecureRandom(), 2048));
            AsymmetricCipherKeyPair keyPair = rsaKeyPairGenerator.GenerateKeyPair();

            //Extracting the private key from the pair
            RsaKeyParameters privatekey = (RsaKeyParameters)keyPair.Private;
            RsaKeyParameters publickey = (RsaKeyParameters)keyPair.Public;


            //To print the public key in pem format
            TextWriter textWriter1 = new StringWriter();
            PemWriter pemWriter1 = new PemWriter(textWriter1);
            pemWriter1.WriteObject(publickey);
            pemWriter1.Writer.Flush();
            string print_publickey = textWriter1.ToString();
            Console.WriteLine("Public key is: {0}", print_publickey);
            Console.WriteLine();


            //To print the private key in pem format
            TextWriter textWriter2 = new StringWriter();
            PemWriter pemWriter2 = new PemWriter(textWriter2);
            pemWriter2.WriteObject(privatekey);
            pemWriter2.Writer.Flush();
            string print_privatekey = textWriter2.ToString();
            Console.WriteLine("Private key is: {0}", print_privatekey);
            Console.WriteLine();



            // want to save public key and private key in local file
           


        }
    }
}
Posted
Updated 6-Oct-20 2:21am
v2

The simplest way might be to use:
File.WriteAllText(@"C:\myPublicKey.txt", print_publickey);
See: File.WriteAllText Method (System.IO) | Microsoft Docs[^]
 
Share this answer
 
v2
Comments
Maciej Los 4-Jan-19 7:08am    
5ed!
You should use the proper classes provided by the .NET framework: Generating Keys for Encryption and Decryption | Microsoft Docs[^].
 
Share this answer
 
I am using bouncy castle for some odd encryption needed for my one client and here is how I generated the file for the public key (I should add that my client only has one key pair used for government submissions, so I only needed the file from their key once off):

public static void getPublicKeyFile()
{
    string publicKeyPath = Path.Combine(@"C:\SomeFolder", "publicKey.pem");
    if (File.Exists(publicKeyPath))
    {
        File.Delete(publicKeyPath);
    }

    using (TextWriter textWriter = new StreamWriter(publicKeyPath, false))
    {
        PemWriter pemWriter = new PemWriter(textWriter);
        pemWriter.WriteObject((RsaKeyParameters)PublicKeyFactory.CreateKey(Convert.FromBase64String(strPublicKey)));
        pemWriter.Writer.Flush();
    }


}
 
Share this answer
 

This content, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)



CodeProject, 20 Bay Street, 11th Floor Toronto, Ontario, Canada M5J 2N8 +1 (416) 849-8900