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

9

我在这里一遍又一遍地试着运行这个看起来很简单的代码,但它就是不起作用:

string middle = "eyJzdWIiOiJtYXR0d2ViZXIiLCJqdGkiOiJlMWVmNjc5Mi02YTBjLTQ4YWUtYmQzNi0wZDlmMTVlMDFiY2UiLCJpYXQiOjE0OTMwOTI0OTQsIm5iZiI6MTQ5MzA5MjQ5NCwiZXhwIjoxNDkzMjY1Mjk0LCJpc3MiOiJFQ29tbVdlYkFQSTIiLCJhdWQiOiJFQ29tbVdlYkNsaWVudDIifQ"

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

就是这么简单!但是我却在标题中遇到了错误。

此外,我在https://www.base64decode.org/上运行它,解码完全没有问题。


1
请查看此链接:https://dev59.com/vnA85IYBdhLWcg3wJf4Z - Samvel Petrosov
2个回答

16

由于您提供的字符串不符合FromBase64String方法接受的标准,您需要添加结束符以遵循惯例。它不会自动将结束符添加到您的字符串

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

来源。

为了解决您遇到的问题,请在您的字符串末尾添加"=="

例如:string middle = "SomeString=="


1
一般情况下还有更多的工作要做,因为有时需要添加单个'='而不是两个,并且有时输入字符串已经"就绪",没有任何填充。 - Sevenate

2
为解决您面临的异常问题:
    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


当(base64.Length % 4 == 1)时会出现问题。你不能在结尾有三个'='。这种情况下你该怎么办? - ElCaballeroQueDiceNi

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接