我知道base64
编码是什么以及如何在C#中计算base64
编码,但是我已经多次看到当我将字符串转换为base64时,有一个=
at结束。
出现了一些问题:
base64
字符串是否始终以=
结尾?=
会在最后附加?答案 0 :(得分:233)
它用作padding。
更完整的答案是,base64编码的字符串总是以=
结尾,如果需要,它只会以一个或两个=
结尾将绳子打到适当的长度。
答案 1 :(得分:188)
1否
2-作为一个简短的回答: 第65个字符(“=”符号)仅用作编码消息的最终过程中的补充。
如果您的字符串中包含3个字符的倍数,则不会有'='符号,因为Base64
编码会将每个 3个字节(8位)用来表示为可打印字符。
详细信息:
(a)如果您想编码
ABCDEFG < => [ABC
] [DEF
] [G
Base64
将处理(产生4个字符)第一个块和第二个块(因为它们已完成)但是对于第三个块,它将添加一个双 ==
输出以完成所需的4个字符。因此,结果将是 QUJD REVG Rw == (无空格)
(b)如果您想编码......
ABCDEFGH < => [ABC
] [DEF
] [GH
同样,它会在输出的末尾添加一个=
来获得4个字符
结果将是 QUJD REVG R0g = (没有空格)
答案 2 :(得分:63)
答案 3 :(得分:15)
答案 4 :(得分:14)
如果在编码数据的末尾可用的位数少于24位,则在RFC 2045中将其定义为特殊的填充字符。
答案 5 :(得分:11)
等号(=)用作某些形式的base64编码的填充。 base64上的Wikipedia article包含所有详细信息。
答案 6 :(得分:8)
这是填充。来自http://en.wikipedia.org/wiki/Base64:
理论上,解码时不需要填充字符,因为 可以从Base64的数量计算丢失的字节数 数字。在一些实现中,填充字符是强制性的, 而对于其他人则没有使用。填充字符的一种情况 需要连接多个Base64编码文件。
答案 7 :(得分:7)
http://www.hcidata.info/base64.htm
编码"玛丽有"到Base 64
在这个例子中,我们使用一个简单的文本字符串(" Mary有"),但无论数据是什么(例如图形文件),原则都成立。为了将每24位输入数据转换为32位输出,Base 64编码将24位分成4个6位的块。我们注意到的第一个问题是"玛丽有"不是3个字节的倍数 - 它是8个字节长。因此,最后一组位只有4位长。为了解决这个问题,我们添加了两个额外的' 0'并记住这个事实,把一个' ='在末尾。如果要转换为Base 64的文本字符串长度为7个字节,则最后一个组将具有2个位。在这种情况下,我们会添加四个额外的位' 0'并记住这个事实,把'&= 39; =='在末尾。
答案 8 :(得分:1)
=
是填充字符。如果输入流的长度不是3的倍数,则将添加填充字符。解码器需要这样做:如果不存在填充,则最后一个字节将具有不正确的零位数目。
此处有更详尽的解释:https://base64tool.com/detect-whether-provided-string-is-base64-or-not/