我有两个AsymmetricAlgorithm对象,包含RSA Private和RSA公钥.从
Windows-MY密钥库中检索私钥,从用户证书中检索公钥.如何使用这些密钥和RSACryptoServiceProvider在C#中使用RSA算法加密数据?换句话说,我如何指定我想使用已有的密钥? 最佳答案
#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)应如下所示:
< RSAKeyValue>
< Modulus> yNi8BvATA77f /6cU6z […] 9VULgU =< / Modulus>
<指数> AQAB< /指数>
< / RSAKeyValue>
私钥(arg)应如下所示:
< RSAKeyValue>
< Modulus> yNi8BvATA77f /6cU6z […] 9VULgU =< / Modulus>
<指数> AQAB< /指数>
< P> 8ZlZPmko3sam9pvD /升[…] 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 = LT; / d取代;
< / RSAKeyValue>