这篇文章建议(请参阅 Anirudh Ramanathan 的回答)Base64 编码的字符串最多可以包含 3 个相同的字符。在网络的其他地方,我看到它可以是一个或两个等号。从理论上讲,由于我们必须将长度设置为 4 的倍数,因此 Anirudh 的答案似乎是正确的。这些信息哪一条是错误的?
使用蛮力,我尝试寻找一个 Base64 会以 3 个等号结尾的字符串,但没有成功找到任何长度最多为 10,000 个字符的字符串。
或者我在这里错过了显而易见的事情?
下表显示了三个输入字节如何映射到四个 Base64 字符。
1 2 3
8-bit: 111111112222222233333333
Base64: 111111222222333333444444
1 2 3 4
Run Code Online (Sandbox Code Playgroud)
这是模 3 输入,是最佳编码方案:没有浪费位,也不需要填充:输出字符串是四个字符。
现在,当您只想对两个输入字节进行编码时,您需要三个输出字符。这意味着输出将使用一个填充字符进行填充,直到总共四个字符。
然后,最小非空输入(即 1 个 8 位字节)被编码为两个 Base64 字符。现在需要两个填充字符才能将输出字符串填充为四个字符。
没有任何输入的输出是一个字符,因此只要您对整个 8 位字节进行编码,就永远不需要使用三个填充字符。
不可以,不能以 3 个“=”符号结尾。Base64 编码字符串的每 4 个字符正好代表 3 个字节,因为字节包含 8 位(2^8),并且 64 = 2^6。所以4个base-64编码的字符最多可以容纳2^6 * 2^6 * 2^6 * 2^6位,也就是2^8 * 2^8 * 2^8 = 3个字节。因为 2^8 > 2^6,所以至少需要两个 Base-64 字符来编码一个字节。由此可见,base-64 字符串不能包含 3 个字符填充:1 个字节将使用两个字符 + 两个填充“=”字符进行编码。2 个字节显然也需要不超过两个填充字符。0 和 3 字节根本不需要填充。