System.FormatException:'Base-64 char数组或字符串的长度无效。'

时间:2017-04-25 05:02:08

标签: c# base64 decode

我在这里用头撞墙,用这个简单的代码不起作用:

string middle = "eyJzdWIiOiJtYXR0d2ViZXIiLCJqdGkiOiJlMWVmNjc5Mi02YTBjLTQ4YWUtYmQzNi0wZDlmMTVlMDFiY2UiLCJpYXQiOjE0OTMwOTI0OTQsIm5iZiI6MTQ5MzA5MjQ5NCwiZXhwIjoxNDkzMjY1Mjk0LCJpc3MiOiJFQ29tbVdlYkFQSTIiLCJhdWQiOiJFQ29tbVdlYkNsaWVudDIifQ"

byte[] newBytes = Convert.FromBase64String(middle);
middle = Encoding.UTF8.GetString(newBytes);

就这么简单!然而我在标题中得到错误。

另外,我在https://www.base64decode.org/上运行它并且它完美地解码。

2 个答案:

答案 0 :(得分:6)

由于您提供的字符串不完全符合FromBase64String方法接受值的标准,因此您需要添加结束符号以遵循约定。它不会自动将结束符号添加到string

  

无值字符“=”用于尾随填充。 s的结尾可以包含零个,一个或两个填充字符。

Source.

要解决问题,您需要在"=="的末尾添加string

例如:string middle = "SomeString=="

答案 1 :(得分:1)

解决您面临的异常:

    public static string Base64UrlDecode(this string base64)
    {
        string padded = base64.PadRight(base64.Length + (4 - base64.Length % 4) % 4, '=');
        return Encoding.UTF8.GetString(Convert.FromBase64String(padded));
    }

所有学分都归于此处Code for decoding/encoding a modified base64 URL接受的答案。