Search code examples
c#bouncycastlersacryptoserviceprovider

Generate key/Encryption/Decryption for RSACryptoProvider and BouncyCastle


Key generated through RSACryptoProvider is work for BouncyCastle Encryption (using publickey) / Decryption (using privatekey) ?

 using (RSACryptoServiceProvider rsa = new RSACryptoServiceProvider())
        {
            var pu = rsa.ToXmlString(false);               
            var pr = rsa.ToXmlString(true);               
        }

Also, how to generate key using BouncyCastle ?


Solution

  • Answer to first question, yes, RSA is a standard and it doesn't depends on the libraries used.

    Second, try this:

        public static void GetRsaKeyPair(out string privateXml, out string publicXml)
        {
            CryptoApiRandomGenerator randomGenerator = new CryptoApiRandomGenerator();
            SecureRandom secureRandom = new SecureRandom(randomGenerator);
            var keyGenerationParameters = new KeyGenerationParameters(secureRandom, 1024);
    
            var rsaKeyPairGenerator = new RsaKeyPairGenerator();
            rsaKeyPairGenerator.Init(keyGenerationParameters);
            AsymmetricCipherKeyPair rsaKeyPair = rsaKeyPairGenerator.GenerateKeyPair();
    
            var privateRsaParameters = DotNetUtilities.ToRSAParameters((RsaPrivateCrtKeyParameters)rsaKeyPair.Private);
    
            using (RSACryptoServiceProvider rsaProvider = new RSACryptoServiceProvider())
            {
                rsaProvider.ImportParameters(privateRsaParameters);
                privateXml = rsaProvider.ToXmlString(true);
                publicXml = rsaProvider.ToXmlString(false);
            }
        }