【发布时间】:2017-05-03 01:03:00
【问题描述】:
我从 API 服务器获取加密字符串
try
{
HttpWebRequest _request = (HttpWebRequest)WebRequest.Create(_url);
_request.KeepAlive = false;
using (HttpWebResponse _response = (HttpWebResponse)_request.GetResponse())
{
using (Stream _stream = _response.GetResponseStream())
{
using (StreamReader _reader = new StreamReader(_stream, Encoding.UTF8))
{
string _content = _reader.ReadToEnd();
Console.WriteLine(Decrypt(_content.ToString(), _key, _iv));
}
}
}
}
catch (Exception ex)
{
Console.WriteLine(ex.ToString());
}
但我收到一个错误:
System.FormatException:输入不是有效的 Base-64 字符串,因为它 包含非 base 64 字符、两个以上的填充字符,或 填充字符中的非法字符。
奇怪的是,如果我复制返回的字符串,它会很好地解密:
string str = "jcXddetnrE6ujO/Al1pqSRPK1+JXfal1XgANOsojPV9SUMOjnBgW09AacxhOUGYWZQoUlfsTEk/8Al1NuX/Gk/S2utUCLeEqHLrXwP5tkFgrrqUffHOzxWyD5vwIY2zQ";
Console.WriteLine(Decrypt(str, _key, _iv));
是否必须以某种方式转换来自 StreamReader 的字符串?
【问题讨论】:
-
这个字符串是从哪里来的?它是否有可能包含在您复制时已删除的引号?尝试将加密字符串打印到控制台
-
您确定响应会以 utf-8 格式返回吗?
-
它是一个基于网络的API,所以格式是
<response>encryptedkeystring</response> -
如果它以 xml 形式返回,您需要从 xml 的其余部分中提取字符串。这不是您在第二段代码中测试的内容。
-
请重新阅读minimal reproducible example 指导。如果可能,代码示例应包含所有内联数据。 (即,在这种情况下,常数值似乎比
string _content = _reader.ReadToEnd();更能证明问题)
标签: c# encryption