Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/329.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Base64编码字符串能否以3个等号结尾?_C#_Base64 - Fatal编程技术网

C# Base64编码字符串能否以3个等号结尾?

C# Base64编码字符串能否以3个等号结尾?,c#,base64,C#,Base64,建议(参见Anirudh Ramanathan的回答)Base64编码字符串最多可以包含3个相等的字符。在网上的其他地方,我看到它可以是一个或两个等号。从理论上讲,由于我们必须将长度设为4的倍数,因此Anirudh的答案似乎是正确的。以下哪一条信息是错误的 使用蛮力,我尝试过寻找一个Base64以3等号结尾的字符串,但没有成功地找到长度达10000个字符的字符串 还是我遗漏了这里的明显符号?不,它不能以3个“=”符号结束。base64编码字符串的每4个字符正好代表3个字节,因为字节包含8位(2^

建议(参见Anirudh Ramanathan的回答)Base64编码字符串最多可以包含3个相等的字符。在网上的其他地方,我看到它可以是一个或两个等号。从理论上讲,由于我们必须将长度设为4的倍数,因此Anirudh的答案似乎是正确的。以下哪一条信息是错误的

使用蛮力,我尝试过寻找一个Base64以3等号结尾的字符串,但没有成功地找到长度达10000个字符的字符串


还是我遗漏了这里的明显符号?

不,它不能以3个“=”符号结束。base64编码字符串的每4个字符正好代表3个字节,因为字节包含8位(2^8),并且64=2^6。因此,base-64编码的4个字符最多可以容纳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字节根本不需要填充。

下表显示了三个输入字节如何映射到四个Base64字符

        1       2       3                
8-bit:  111111112222222233333333
Base64: 111111222222333333444444 
        1     2     3     4                   
这是一个模3输入,是最佳的编码方案:没有比特浪费,也不需要填充:输出字符串是四个字符

        1       2       3                
8-bit:  111111112222222233333333
Base64: 111111222222333333444444 
        1     2     3     4                   
现在,如果只想编码两个输入字节,则需要三个输出字符。这意味着使用一个填充字符填充输出,直到总共四个字符

        1       2       3                
8-bit:  111111112222222233333333
Base64: 111111222222333333444444 
        1     2     3     4                   
然后,最小非空输入(一个8位字节)被编码为两个Base64字符。现在需要两个填充字符才能将输出字符串填充为四个字符

        1       2       3                
8-bit:  111111112222222233333333
Base64: 111111222222333333444444 
        1     2     3     4                   

没有输出为一个字符的输入,因此,只要对整个8位字节进行编码,就不必使用三个填充字符。

这是不正确的。他基于字符串长度必须为4的倍数的要求进行猜测,因此假设最多需要3个填充字符。他没有意识到的是base64总是在填充之前生成偶数个字符。所以最多需要2个填充字符。请注意来自Base64String的链接。编辑之前的链接答案在这里,谢谢。很好。