【问题标题】:Valid Base64 string can't be decoded无法解码有效的 Base64 字符串
【发布时间】:2020-03-27 03:24:11
【问题描述】:

我有一个有效的 base64 字符串,我可以在在线工具中对其进行解码,但是当涉及到下面的行时;

string token = "eyJ1bmlxdWVfbmFtZSI6InllbmVyLnlpbG1hekB5ZHlhemlsaW0uY29tIiwiZ2l2ZW5fbmFtZSI6Ik1laG1ldCBZZW5lciIsImZhbWlseV9uYW1lIjoiWUlMTUFaIiwiZW1haWwiOiJ5ZW5lci55aWxtYXpAeWR5YXppbGltLmNvbSIsInJvbGUiOiJBZG1pbiIsIm5iZiI6MTU4NTI0OTI1NCwiZXhwIjoxNTg1ODU0MDU0LCJpYXQiOjE1ODUyNDkyNTR9==";
try
{
    var asd = Convert.FromBase64String(token);
}
catch (Exception ex)
{
    throw;
}

它抛出异常..

异常消息:

"输入不是有效的 Base-64 字符串,因为它包含非 base 64 字符、两个以上的填充字符或非法字符 在填充字符之间。”

为什么会这样?

【问题讨论】:

标签: c# asp.net base64


【解决方案1】:

由于 Base64 字符串将每个字节 6 位映射到 8 位,因此每 3 个字节(24 位)变为 4 个字节。 Base64 字符串长度必须能被 4 整除,如果没有在其末尾添加所需的 = 字符(实际上不是其内容的一部分)以使长度能被 4 整除。

由于您的 Base64 字符串长度已经可以被 4 整除,因此不需要额外的 = 字符。

【讨论】:

    【解决方案2】:

    您可以查看validator。

    这行得通:

        string s  = "eyJ1bmlxdWVfbmFtZSI6InllbmVyLnlpbG1hekB5ZHlhemlsaW0uY29tIiwiZ2l2ZW5fbmFtZSI6Ik1laG1ldCBZZW5lciIsImZhbWlseV9uYW1lIjoiWUlMTUFaIiwiZW1haWwiOiJ5ZW5lci55aWxtYXpAeWR5YXppbGltLmNvbSIsInJvbGUiOiJBZG1pbiIsIm5iZiI6MTU4NTI0OTI1NCwiZXhwIjoxNTg1ODU0MDU0LCJpYXQiOjE1ODUyNDkyNTR9";
        var c = Convert.FromBase64String(s);
        Console.WriteLine(System.Text.ASCIIEncoding.ASCII.GetString(c));
    

    【讨论】:

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