我有两个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
- 1. 使用RSA公钥加密DSA私钥
- 2. c#RSA从私钥中提取公钥
- 3. C#RSA加密与私钥
- 4. 在RSA算法中使用公钥
- 5. 使用以前生成的RSA公钥/私钥与.net框架
- 6. 可以使用JSBN/Forge生成RSA私钥/公钥对吗?
- 7. C#公钥中的RSA与私钥是一样的吗?
- 8. 如何存储RSA私钥,公钥
- 9. YAML中的RSA公钥/私钥
- 10. 私钥/公钥ssh-keygen -t rsa
- 11. 如何使用Swift 3生成RSA公钥和私钥?
- 12. 如何使用RSA私钥和公钥创建.der文件?
- 13. c#WebApi如何创建rsa私钥和公钥
- 14. 如何与RSA公钥/私钥和GnuTLS形成TLS连接?
- 15. 雨云JOSE JWT加密与RSA,私钥和公钥
- 16. 验证私钥和公钥RSA密钥匹配
- 17. bash中的RSA算法(私钥计算)
- 18. 用RSA公钥和私钥加密和解密一个SecretKey
- 19. C#为DSA加密算法生成公钥和私钥
- 20. c#的RSA公共密钥的公钥#
- 21. Bouncycastle加密私钥PEM输出:RSA私钥与私钥
- 22. 是不是公开的RSA私钥?
- 23. OpenSSL AES_cfb128_encrypt公钥/私钥C++
- 24. 私钥/公钥
- 25. 从C++中的RSA私钥中提取公钥没有openssl
- 26. 无法加载从RSA私钥文件的私钥在C#
- 27. Google recaptcha公钥和私钥
- 28. C#RSA使用私钥解密
- 29. 除了RSA以外,.NET中的公钥和私钥
- 30. 如何通过RSA生成唯一的公钥和私钥
当你包含有关这些 '两个对象' 的一些细节你可以得到更好的答案。 – 2010-07-08 18:39:41
它们与我从用户证书中提取的RSA密钥相匹配,还有什么可说的? – 2010-07-08 19:12:28