Использование AsymmetricAlgorithm закрытого и открытого ключа с RSA C # - PullRequest
4 голосов
/ 08 июля 2010

У меня есть два объекта AsymmetricAlgorithm, которые содержат закрытый ключ RSA и открытый ключ RSA. Закрытый ключ был извлечен из хранилища ключей Windows-MY, а Открытый ключ - из сертификата пользователя. Как я могу использовать эти ключи вместе с RSACryptoServiceProvider для шифрования данных, используя алгоритм RSA в C #? Другими словами, как я могу указать, что я хочу использовать ключи, которые у меня уже есть?

1 Ответ

2 голосов
/ 08 июля 2010
#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 

Открытый ключ (arg) должен выглядеть следующим образом: yNi8BvATA77f + / 6cU6z [...] 9VULgU = AQAB

Закрытый ключ (arg) должен выглядеть следующим образом: yNi8BvATA77f + / 6cU6z [...] 9VULgU = AQAB

8ZlZPmko3sam9pvD / l [...]ba0MWLjj9dyUMvmTQ6L8m9IQ ==

1NGHjXyEa9SjUwY [...] v + op2YyyglMeK / Gt5SL0v6xqQZQ == Лпджэ] 8x3qaD3wx + UbnM5v3aE5Q == fQ4 + 7r3Nmgvz113L [...] uJqEgCNzw == B4n7JNeGHzHe / nqEK [...] GaOBtuz0 10 * * 28 = =
...