Encoding 为什么base64编码的字符串末尾有=符号
我知道什么是Encoding 为什么base64编码的字符串末尾有=符号,encoding,base64,Encoding,Base64,我知道什么是base64编码,以及如何计算C#中的base64编码,但是我多次看到,当我将字符串转换为base64时,末尾有一个= 出现了几个问题: base64字符串是否总是以=结尾 为什么一个=会附加在末尾 它起到了很好的作用 更完整的答案是,base64编码的字符串并不总是以=结尾,如果需要将字符串填充到适当的长度,它将仅以一个或两个=结尾。来自: 最后一个“==”序列表示最后一个组只包含一个字节,“=”表示它包含两个字节 因此,这是某种填充。等号(=)在某些形式的base64编码中用作填
base64
编码,以及如何计算C#中的base64
编码,但是我多次看到,当我将字符串转换为base64时,末尾有一个=
出现了几个问题:
base64
字符串是否总是以=
结尾=
会附加在末尾=
结尾,如果需要将字符串填充到适当的长度,它将仅以一个或两个=
结尾。来自:
最后一个“==”序列表示最后一个组只包含一个字节,“=”表示它包含两个字节
因此,这是某种填充。等号(=)在某些形式的base64编码中用作填充。base64上的具有所有详细信息。如果编码数据末尾的可用位少于24位,则在中将其定义为特殊填充字符。它是填充字符。发件人:
理论上,解码不需要填充字符,因为
可以根据Base64的数量计算缺少的字节数
数字。在某些实现中,填充字符是必需的,
而其他人则不使用。填充字符的一种情况 需要连接多个Base64编码文件
Base64
编码将每个3个字节(8位)表示为4个可打印字符
详情:
(a)如果要编码
ABCDEFG[ABC
][DEF
][G
Base64
将处理第一个块(产生4个字符)和第二个块(完成后)。但对于第三个块,它将在输出中添加一个双=
,以完成所需的4个字符。因此,结果将是qjdREVGRw=(没有空格)
(b)如果要编码
ABCDEFGH[ABC
][DEF
][GH
类似地,它将只在输出的末尾添加一个=
,以获得4个字符
结果将是qjdREVGR0g=(不带空格).
=
是一个填充字符。如果输入流的长度不是3的倍数,则将添加填充字符。解码器需要这样做:如果不存在填充,则最后一个字节的零位数将不正确
这里有更好更深入的解释:这与C#完全无关。实际上它与C#有关,并非所有语言都包含=,例如许多perl库都省略了=,因此了解用户使用的环境实际上是相关的。这似乎使它在某些CA中成为一种不太有效的混淆方法es,因为它是可检测的。@user1167442 Base64不是用于模糊处理的。它是用于将二进制数据(或带有unicode和其他特殊字符的字符串)作为字符串传输的。您能解释一下为什么“==”是1个字节而“=”是2个字节的逻辑吗?我只是不明白。为什么输入“任何肉体的快乐”会得到结果“YW55IGNhcm5hbCBwbGVhc3VyZS4=”,而“任何肉体的愉悦”都可以得到结果“YW55IGNhcm5hbCBwbGVhc3VyZQ”==“?不是说“==”是1个字节,“=”是2个字节。而是说,你需要在整个字符串中始终有4个字节的倍数。所以你用“=”符号填充,直到得到为止。第一个字符串比第二个字符串多一个字符,所以需要少填充一个“=”。这个答案应该是注释吗?“需要填充字符的一种情况是连接多个Base64编码的文件。”@AndréPuel:重新同步一个
=
就足够了。如果您想找到以前的边界,那么应该始终存在终止符(仍然只需要一个字符)。Base64的整个填充概念只是一个愚蠢的想法…不过,该链接与Base64完全无关。我只希望发布一个相关且可靠的链接,通过插图和示例有效地解释Base64
中的填充。当前指向wikipedia的链接与@NH.提及的内容完全无关。@Fr0zenFyr如果你想要一个链接,这很好。但是这个确实是一个更好的链接(只是还没有赶上投票)。关于“需要填充字符的一种情况是连接多个Base64编码文件”的部分是错误的。例如,当连接两个Base64文件时,源字节