我正在尝试使用公钥向客户端的api发送加密响应,并尝试使用我的私钥解密客户端发出的响应。 当我尝试解密该消息时,它说“密钥不存在”。以下是我正在使用的代码。
| id | date |ranking |
==============================
| 119 | 2018-03-01 | 1 |
| 119 | 2018-04-01 | 2 |
| 119 | 2018-05-01 | 3 |
| 120 | 2018-02-01 | 1 |
| 120 | 2018-03-01 | 2 |
--------------------------------
和解密
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;
}
}
}
希望这就够了。请建议
答案 0 :(得分:1)
你正在尝试进行一系列的转换,但你并没有在每个方向做相反的事情。
您已经获取了加密的二进制数据并将其转换为base64,但之后您将使用UTF-8获取base64数据并将其转换为二进制数,之后由于某些原因将其拆分为逗号:
var dataArray = data.Split(new char[] { ',' });
byte[] dataByte = new byte[dataArray.Length];
dataByte = Encoding.UTF8.GetBytes(data);
要反转base64编码的最后一个操作,您应该执行base64-decoding:
byte[] dataByte = Convert.FromBase64String(data);
这可能不是唯一的错误,但它是我发现的第一个事物。