在C#中解码base64有时会带有一个额外的填充字符给出错误的结果



我偶然发现了.NET 4.7.2中Convert.FromBase64String的奇怪行为。通常,当填充不正确时,它会引发例外。但是我发现一个添加另一个填充字符的情况会产生不正确的结果,而不是异常。

var correct = Convert.FromBase64String("YWE=");

在这种情况下,correct是字符串形式的[97, 97]"aa"。但是当我添加另一个=

var incorrect = Convert.FromBase64String("YWE==");

而不是获得异常,而是少得多,而incorrect[88]"X"是字符串表单。

很奇怪。这是一个错误,应该报告吗?还是已知/有记录的行为?我找不到对此的任何参考。

与Ruby相比。这将评估为"aa"

Base64.strict_decode64 "YWE="

这引起了例外:

Base64.strict_decode64 "YWE=="
ArgumentError: invalid base64
from /usr/local/Cellar/ruby/2.6.1/lib/ruby/2.6.0/base64.rb:74:in `unpack1'

看起来这是一个错误:https://github.com/dotnet/corefx/issues/30793它固定在.NET核心中,但仍存在于.NET框架中,直到4.8。

此代码应在例外中流产,而不是打印1

using System;
public class Program
{
    public static void Main()
    {
        Console.WriteLine(Convert.FromBase64String("YWE==").Length);
    }
}

这是一个测试:https://dotnetfiddle.net/x2x9ct

最新更新