【发布时间】:2018-09-10 21:15:36
【问题描述】:
我正在尝试使用公钥向客户端的 api 发送加密响应,并尝试使用我的私钥解密来自客户端的响应。 当我尝试解密消息时,它显示“密钥不存在”。以下是我正在使用的代码。
public string Encryption(string strText, string publickey)
{
var data = Encoding.UTF8.GetBytes(strText);
using (var rsa = new RSACryptoServiceProvider(2048))
{
try
{
var key = "<RSAKeyValue><Modulus>" + publickey.Replace('-', '+').Replace(' ', '+') + "</Modulus><Exponent>AQAB</Exponent></RSAKeyValue>";
rsa.FromXmlString(key);
var encryptedData = rsa.Encrypt(data, true);
var base64Encrypted = Convert.ToBase64String(encryptedData);
return base64Encrypted;
}
catch (Exception ex)
{
return ex.Message;
}
finally
{
rsa.PersistKeyInCsp = false;
}
}
}
用于解密
public string Decrypt(string data, string privateKey)
{
CspParameters cp = new CspParameters();
cp.KeyContainerName = "MyKeyContainerName";
var rsa = new RSACryptoServiceProvider(cp);
var dataArray = data.Split(new char[] { ',' });
byte[] dataByte = new byte[dataArray.Length];
dataByte = Encoding.UTF8.GetBytes(data);
var encoder = new UnicodeEncoding();
var key = "<RSAKeyValue><Modulus>" + privateKey + "</Modulus><Exponent>AQAB</Exponent></RSAKeyValue>";
rsa.FromXmlString(key);
var decryptedByte = rsa.Decrypt(dataByte, false);
return encoder.GetString(decryptedByte);
}
希望这已经足够了。请指教
【问题讨论】:
-
我猜你需要在
Decrypt-方法中指定密钥大小,比如var rsa = new RSACryptoServiceProvider(2048, cp); -
<Modulus>privateKey</Modulus>没有做任何有用的事情,也不是正确的方法。您的错误是“我没有私钥” -
@MartinBackasch 感谢您的回复。我试了一下,还是一样的错误。
标签: c# encryption rsa public-key-encryption private-key