【问题标题】:The input is not a valid Base-64 string from StreamReader输入不是来自 StreamReader 的有效 Base-64 字符串
【发布时间】: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


【解决方案1】:

奇怪的是,如果我复制返回的字符串,它会很好地解密

确保在解密之前删除前导和尾随引号和空格。当您手动复制字符串时,这些可能已被删除。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多