Q:

Using AsymmetricAlgorithm Private and Public key with RSA C#

I have two AsymmetricAlgorithm objects that contain an RSA Private and RSA Public key.  The private key was retrieved out of the Windows-MY keystore and the Public key from a user's certificate.  How can I use these keys along with RSACryptoServiceProvider to encrypt data using the RSA algorithm in C#?  In other words, how can I specify that I want to use keys that I already have? 

A:

#region "RSA Encrypt/Decrypt"  
public string RSAEncrypt(string str, string publicKey)  
{  
  //---Creates a new instance of RSACryptoServiceProvider---  
  try {  
     RSACryptoServiceProvider RSA = new RSACryptoServiceProvider();  
     //---Loads the public key---  
     RSA.FromXmlString(publicKey);  
     byte[] EncryptedStr = null;  

     //---Encrypts the string---  
     EncryptedStr = RSA.Encrypt(ASCII.GetBytes(str), false);  
     //---Converts the encrypted byte array to string---  
     int i = 0;  
     System. Text. StringBuilder s = new System. Text. StringBuilder();  
     for (i = 0; i <= EncryptedStr. Length - 1; i++) {  
         //Console. WriteLine(EncryptedStr(i))  
         if (i ! = EncryptedStr. Length - 1) {  
             s.Append(EncryptedStr[i] + " ");  
         } else {  
             s.Append(EncryptedStr[i]);  
         }  
     }  

     return s.ToString();  
   } catch (Exception err) {  
     Interaction. MsgBox(err. ToString());  
   }  
}  

public string RSADecrypt(string str, string privateKey)  
{  
  try {  
     //---Creates a new instance of RSACryptoServiceProvider---  
     RSACryptoServiceProvider RSA = new RSACryptoServiceProvider();  
     //---Loads the private key---  
     RSA.FromXmlString(privateKey);  

     //---Decrypts the string---  
     byte[] DecryptedStr = RSA.Decrypt(HexToByteArr(str), false);  
     //---Converts the decrypted byte array to string---  
     System. Text. StringBuilder s = new System. Text. StringBuilder();  
     int i = 0;  
     for (i = 0; i <= DecryptedStr. Length - 1; i++) {  
         //Console. WriteLine(DecryptedStr(i))  
         s.Append(System. Convert. ToChar(DecryptedStr[i]));  
     }  
     //Console. WriteLine(s)  
     return s.ToString();  
  } catch (Exception err) {  
     Interaction. MsgBox(err. ToString());  
  }  
}  
#endregion 

The Public Key (arg) should look like this:
    <RSAKeyValue>
      <Modulus>yNi8BvATA77f+/6cU6z[...]9VULgU=</Modulus>
      <Exponent>AQAB</Exponent>
    </RSAKeyValue>
The Private Key (arg) should look like this:
    <RSAKeyValue>
      <Modulus>yNi8BvATA77f+/6cU6z[...]9VULgU=</Modulus>
      <Exponent>AQAB</Exponent>
      <P>8ZlZPmko3sam9pvD/l[...]ba0MWLjj9dyUMvmTQ6L8m9IQ==</P>
      <Q>1NGHjXyEa9SjUwY[...]v+op2YyyglMeK/Gt5SL0v6xqQZQ==</Q>
      <DP>LpjE/aSKnWzzBt1E[...]i5f63Ak9wVG3ZPnwVDwefNkMAQ==</DP>
      <DQ>qAgb8AGNiJom[...]8x3qaD3wx+UbnM5v3aE5Q==</DQ>
      <InverseQ>fQ4+7r3Nmgvz113L[...]uJqEgCNzw==</InverseQ>
      <D>B4n7JNeGHzHe/nqEK[...]GaOBtuz0QTgE=</D>
    </RSAKeyValue>

