为什么base64编码的字符串最后有一个=符号

时间:2011-08-02 18:31:10

标签: encoding base64

我知道base64编码是什么以及如何在C#中计算base64编码,但是我已经多次看到当我将字符串转换为base64时,有一个= at结束。

出现了一些问题:

  1. base64字符串是否始终以=结尾?
  2. 为什么=会在最后附加?

9 个答案:

答案 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)

来自Wikipedia

  

最后的'=='序列表示最后一个组只包含一个字节,'='表示它包含两个字节。

因此,这是某种填充。

答案 3 :(得分:15)

  1. 没有
  2. 将Base64编码的字符串填充为4个字符的长度,以便正确解码。

答案 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/