我偶然发现了.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'
答案 0 :(得分:7)
看起来像是个错误:https://github.com/dotnet/corefx/issues/30793 它在.NET Core中已修复,但在4.7.2之前的.NET Framework中仍然存在。
此代码应异常终止,而不是打印1
:
using System;
public class Program
{
public static void Main()
{
Console.WriteLine(Convert.FromBase64String("YWE==").Length);
}
}