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