使用不对称算法私钥和公钥与RSA C#
我有两个AsymmetricAlgorithm对象包含一个RSA私钥和RSA公钥。私钥从Windows-MY密钥存储区中取出,并从用户证书中取回公钥。我如何使用这些密钥和RSACryptoServiceProvider一起使用C#中的RSA算法加密数据?换句话说,我如何指定我想要使用我已有的密钥?使用不对称算法私钥和公钥与RSA C#
#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> <模> yNi8BvATA77f +/6cU6z [...] 9VULgU = < /模> <指数> AQAB < /指数> </RSAKeyValue >
私钥(arg)应该如下所示: <RSAKeyValue> <模> yNi8BvATA77f +/6cU6z [...] 9VULgU = < /模> <指数> 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 = </d > </RSAKeyValue >
酷,我可以使用AsymmetricAlgorithm.ToXmlString(布尔)将密钥转换为XML。谢谢。 – 2010-07-08 18:35:48
-1,对不起,这个例子已经足够糟糕了,以致未来的人误入歧途。不需要专门化字符串,不需要专门化ASCII字符串,也不需要解密从其加密方法输出的格式,并且包含未指定的方法HexToByteArr()。 – 2010-07-09 00:19:04
@gregs,你有点挑剔好友。几年前,我建立了这两个函数,因为它比字节[]更容易加密/解密(ascii)字符串。它展示了这个概念。将Hex转换为byte []非常重要,所以我没有在这里包含不相关的代码。快速搜索“HexToBytes”可以得到很多例子。 – tgolisch 2010-07-09 16:10:20
当你包含有关这些 '两个对象' 的一些细节你可以得到更好的答案。 – 2010-07-08 18:39:41
它们与我从用户证书中提取的RSA密钥相匹配,还有什么可说的? – 2010-07-08 19:12:28