Source : BouncyCastle
Code
class Program {
private static RSAParameters rsaPubParams;
private static RSAParameters rsaPrivateParams;
static void Main(string[] args) {
//test to generate key pair
RsaKeyPairGenerator g = new RsaKeyPairGenerator();
g.Init(new KeyGenerationParameters(new SecureRandom(), 2048));
AsymmetricCipherKeyPair pair = g.GenerateKeyPair();
//get public key and private key
PrivateKeyInfo privateKeyInfo = PrivateKeyInfoFactory.CreatePrivateKeyInfo(pair.Private);
byte[] serializedPrivateBytes = privateKeyInfo.ToAsn1Object().GetDerEncoded();
string serializedPrivate = Convert.ToBase64String(serializedPrivateBytes);
SubjectPublicKeyInfo publicKeyInfo = SubjectPublicKeyInfoFactory.CreateSubjectPublicKeyInfo(pair.Public);
byte[] serializedPublicBytes = publicKeyInfo.ToAsn1Object().GetDerEncoded();
string serializedPublic = Convert.ToBase64String(serializedPublicBytes);
//geet private key and public key from base 64 string
RsaPrivateCrtKeyParameters privateKey = (RsaPrivateCrtKeyParameters) PrivateKeyFactory.CreateKey(Convert.FromBase64String(serializedPrivate));
//Step 1, using BouncyCastle.Crypto
//sample from internet, generated by Java
string serializedPrivateFromInternet = "MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQCg/CGaNMtQ/velFK5Xgz3ylKKxAJFkGesfAGoDLeeejUM1ka2KSIGyDaHL5TnNMrJueHdVL2bp0R4ykLyaLCIb1Z8DBFqP1RD0f2Gp2M2l3BWhAignJ1TYJ5c9nwnjDMrUMeL2J4YLzP9G7PR+OE6qD+cpOPPAKdCXWA1zcxZKXBqPSdJXgcQeB4h+4tn+tmdRL/V58IsGqwHGstmdT4UyTHThfkDJlWjXxJkrzUvI4uIXK5bwhb2WMK3l2+MW9LuoQDJmMxTR/9vOZArUyECgE4SJFPP98FGW8E5uChljgahtXoVXLNr5t36Sb41Yq+W3iHTlssZ+90U1AavNjyynAgMBAAECggEAaKjic62lDQhmGgXi/nQNnxrw1mBHJawQBvyu71g1wAeYzUfjagaPgyGHsdZaCMTP6jAZbOE/Z/2TQ06Dvzu4BR6RnVWERwQ/XKU/6jtQH2eBDEcpsaLJbyn2EpLFy73yU5gHNP8nD577y7Gblj+nLLrgDxW+qozE1s/hFtCYikhk5+3EYIe3bqRKzvBxDprOHkgmNOdw27TbV9A2pur0xYUw3T+AvOg5xQvW0XAzpHsmXrZrDoXCH/pUqBwKfh4lLXf+9gCfgG/j7VD9c5rIKMJbroa7vYYDgjfwo1gEJUx8pNqdfFoQR9g6Dfjre2cyfD54kmP5gLYk2AZpsmY5wQKBgQDMXXaAXEacmmMm0dhq74ZGSPchRuQ5rleOTqdR07falcLiyy6Z0hNm6H9GSNEl1pZ2Y2OTUn1ZbMD85aGuUw6+zFtOnfY+GLzjPdDyHxHb2Xj3tU1g50gtOXtc22d2JujQ9Lrp5Di/25WgfC6IHQQvBaEFxW86eQQfK0/UuRSqBwKBgQDJqMs2i5OM2YvAGkQYs0W09V2zFK2BsA/4azhCmx6rzeWJ+SHTgrqPgk4EzL9rut9MCGYe4LcTXlNVfYKoZuiU4sjhzKZ7QeV1wrWOXN7vCz2Xai3unnRFdTxBVrEJboXnTq5M1dYmdk1z/Ub3TbltVfCP3FLVPlc9PcYjYb9AYQKBgQDJzHiZY4TuWp0R1iDH52FFwgMVvvTZ6EfY493gtRlVJJDedhe8GG7ELUyQUJMFtBG7MYVAEjJovTUMBIxUoPtseEqpJN3kj3TlR0Mt8nQmDWaf401XJMpmrd4c4SIWz3ER9LclAhDvkpr7b+Raz5wz+nD4S+77ZEgnpxMbUO8QvQKBgQCpuEMXbA9JqsogarrHIxJWw28RyiRhEsHOLMcT36PHqqk2HxQmBE9pepyZE41DaOqH/kWcVToftfJi8BgoDTxQGjJBP9EZyZMKMk5FO8pw20ACEF4KBxgKYSnOP90N+BQAYcr2Zb4vbr+vEApLFwIpj/u/yAl66VXY+AWrP5gL4QKBgDOcQGpMtKkYi8+1nSArdH7crR0EZs4SkVJGzKUy2P1ThkcTXciT9KvMyRqGGWWlZ8pYjgHVtLsU6dv1ZudMQu+hC3dau6f2xmDDDyBau858XBW6pf6c/hrTwLPwxaDRzIWz5lMzGXXdoTD8rLrjc5NWvqlnFsjDqZACEzjPpMRR";
string serializedPublicFromInternet = "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAoPwhmjTLUP73pRSuV4M98pSisQCRZBnrHwBqAy3nno1DNZGtikiBsg2hy+U5zTKybnh3VS9m6dEeMpC8miwiG9WfAwRaj9UQ9H9hqdjNpdwVoQIoJydU2CeXPZ8J4wzK1DHi9ieGC8z/Ruz0fjhOqg/nKTjzwCnQl1gNc3MWSlwaj0nSV4HEHgeIfuLZ/rZnUS/1efCLBqsBxrLZnU+FMkx04X5AyZVo18SZK81LyOLiFyuW8IW9ljCt5dvjFvS7qEAyZjMU0f/bzmQK1MhAoBOEiRTz/fBRlvBObgoZY4GobV6FVyza+bd+km+NWKvlt4h05bLGfvdFNQGrzY8spwIDAQAB";
//byte[] publicKeyBytes = Convert.FromBase64String(serializedPublic);
byte[] publicKeyBytes = Convert.FromBase64String(serializedPublicFromInternet);
AsymmetricKeyParameter asymmetricKeyParameter = PublicKeyFactory.CreateKey(publicKeyBytes);
//byte[] privateKeyBytes = Convert.FromBase64String(serializedPrivate);
//byte[] privateKeyBytes = Convert.FromBase64String(serializedPrivateFromInternet);
//AsymmetricKeyParameter asymmetricKeyParameter2 = PrivateKeyFactory.CreateKey(privateKeyBytes);
//get spesific public key from internet
RsaKeyParameters rsaKeyParameters = (RsaKeyParameters) asymmetricKeyParameter;
RSAParameters rsaParameters = new RSAParameters();
rsaParameters.Modulus = rsaKeyParameters.Modulus.ToByteArrayUnsigned();
rsaParameters.Exponent = rsaKeyParameters.Exponent.ToByteArrayUnsigned();
// get private key
//RSAParameters rsaParameters = DotNetUtilities.ToRSAParameters(privateKey);
//CspParameters cspParameters = new CspParameters();
RSACryptoServiceProvider rsaCSP = new RSACryptoServiceProvider(2048); //key size
rsaCSP.ImportParameters(rsaParameters);
//set public and private key to RSAKeyParameters c#
//rsaPrivateParams = rsaCSP.ExportParameters(true);
rsaPubParams = rsaCSP.ExportParameters(false);
}
}