I have the following code.
RSACryptoServiceProvider RSA = new RSACryptoServiceProvider(); //Save the public key information to an RSAParameters structure. RSAParameters RSAKeyInfo = RSA.ExportParameters(true); byte[] toEncryptData = Encoding.ASCII.GetBytes("hello world"); byte[] encryptedRSA = RSAEncrypt(toEncryptData, RSAKeyInfo, false); string EncryptedResult = System.Text.Encoding.Default.GetString(encryptedRSA); byte[] decryptedRSA = RSADecrypt(encryptedRSA, RSAKeyInfo, false); string originalResult = System.Text.Encoding.Default.GetString(decryptedRSA); return userDetails.ToString();
When I use the RSAEncrypt method it takes the parameter "RSAKeyInfo" (Public key for encryption and Private key for decryption).
How can I get the value of private and public keys, which this method used for encryption and decryption.
Thanks,
You need to use RSA.ToXmlString
Code below uses two different RSA instances with a shared string containing public and private keys. To obtain only public key, use a false
parameters, true
parameter will return public + private key.
class Program { public static void Main(string[] args) { //Encrypt and export public and private keys var rsa1 = new RSACryptoServiceProvider(); string publicPrivateXml = rsa1.ToXmlString(true); // <<<<<<< HERE byte[] toEncryptData = Encoding.ASCII.GetBytes("hello world"); byte[] encryptedRSA = rsa1.Encrypt(toEncryptData, false); string EncryptedResult = Encoding.Default.GetString(encryptedRSA); //Decrypt using exported keys var rsa2 = new RSACryptoServiceProvider(); rsa2.FromXmlString(publicPrivateXml); byte[] decryptedRSA = rsa2.Decrypt(encryptedRSA, false); string originalResult = Encoding.Default.GetString(decryptedRSA); } }