我想知道为什么从base64字符串转换为不同的字符串返回相等的字节数组?
const string s1 = "dg==";
const string s2 = "dq==";
byte[] a1 = Convert.FromBase64String(s1);
byte[] a2 = Convert.FromBase64String(s2);
Console.WriteLine(a1.SequenceEqual(a2)); // prints "True".
答案 0 :(得分:13)
由于编码规则。当最后四个字符组包含两个填充字符时(如此处所示),它将解码为单个字节。这意味着解码将考虑编码到第一个字符中的所有6个比特,以及编码到第二个字符中的2个比特。
在base64 alphabet g
对应十进制32和q
对十进制42.当转换为6位二进制时,这两个值的两个最高有效位都设置为{{ 1}}:
10
由于只有这两个比特进入解码输出,因此输出也是相同的(同一个符号,范围[32,47]中的任何小数=>范围内的任何base64数字{{ 1}}在第二个位置替换时会产生相同的结果)。这一切都是这样的:
Base64 Decimal Binary
g 32 100000
h 33 100001
....
q 42 101010
^^