为什么一个base64编码的string在末尾有一个=符号
我知道什么是base64
编码,以及如何在C#中计算base64
编码,但是我已经多次看到,当我将一个string转换为base64时,最后是一个=
。
有几个问题出现了:
-
base64
string总是以=
结尾吗? - 为什么最后会附加一个
=
?
它用作填充 。
更完整的答案是,base64编码的string并不总是以a结尾,如果需要将string填充到合适的长度,它将只以一个或两个=
结尾。
维基百科 :
'=='和'='序列表示最后一个组只包含8位或16位。
因此,这是某种填充。
作为一个简短的回答:第65个字符(“=”符号)仅在编码消息的最后过程中用作补充。
如果您的string具有3个字符数的倍数,则不会有'='符号。 因为Base64编码需要三个字节(8位),并将它们表示为ASCII标准中的四个可打印字符。
细节 :
(a)如果你想编码…
ABCDEFG <=> [ ABC
] [ DEF
] [ G
Base64将处理第一个块和第二个,但第三个将在输出中添加一个double ==以完成4个需要的字符。结果将是QUJD REVG Rw == (无空格)
(b)如果你想编码…
ABCDEFGH <=> [ ABC
] [ DEF
] [ GH
它将在输出结尾添加一个单一的= 4个字符,结果将是QUJD REVG R0g = (无空格)
如果在编码数据的末尾有less于24位可用,则其在RFC 2045中定义为特殊的填充字符。
等号(=)用作某种forms的base64编码的填充。 维基百科关于base64的文章包含了所有的细节。
- 没有。
- 要将Base64编码的string填充到长度为4个字符的倍数,以便可以正确解码。
这是填充。 从http://en.wikipedia.org/wiki/Base64 :
理论上,填充字符不需要解码,因为丢失字节的数量可以从Base64数字的个数计算出来。 在一些实现中,填充字符是必需的,而对于其他的则不使用。 其中需要填充字符的一种情况是连接多个Base64编码文件。
http://www.hcidata.info/base64.htm
编码“玛丽有”到基地64
在这个例子中,我们使用一个简单的文本string(“Mary had”),但是不pipe数据是什么(例如graphics文件),该原则都是可以的。 为了将每24位input数据转换为32位输出,Base 64编码将24位分成4个6位块。 我们注意到的第一个问题是“玛丽有”不是3个字节的倍数 – 它是8个字节长。 因此,最后一组比特只有4比特长。 为了解决这个问题,我们添加两个额外的'0'位,并在末尾加上'='来记住这个事实。 如果要转换为Base 64的文本string长度为7个字节,则最后一个组将具有2个比特。 在这种情况下,我们会添加4个额外的'0'位,并在末尾加上'=='来记住这个事实。