关于编码:为什么base64编码的字符串末尾有一个=符号

Why does a base64 encoded string have an = sign at the end

我知道base64编码是什么,以及如何计算c中的base64编码,但是我已经见过好几次了,当我将一个字符串转换成base64时,末尾有一个=

出现了几个问题:

  • base64字符串是否总是以=结尾?
  • 为什么一个=会在末尾附加?

  • 它起填充作用。

    一个更完整的答案是,base64编码的字符串并不总是以=结尾,如果需要将字符串填充到适当的长度,它只以一个或两个=结尾。


    1-NO

    2-简而言之:第65个字符("="号)仅在对消息进行编码的最后一个过程中用作补码。

    如果字符串的数字是3个字符的倍数,则不会有"="符号,因为Base64编码每三个字节(8位),在ASCII标准中将它们表示为4个可打印字符。

    细节:

    (a)如果你想编码

    abcdefg<=>[ABCDEFG

    Base64将处理(产生4个字符)第一个块和第二个块(完成时),但第三个块将在输出中添加一个双==以完成所需的4个字符,因此结果将为qujd revg rw==(无空格)

    (b)如果你想编码…

    abcdefgh<=>[ABCDEFGH

    同样,它只会在输出的末尾添加一个=,以获得4个字符。结果将为qujd revg r0g=(无空格)


    维基百科:

    The final '==' sequence indicates that the last group contained only one byte, and '=' indicates that it contained two bytes.

    因此,这是某种填充。


  • 不。
  • 将base64编码的字符串填充为4个字符的倍数,以便正确解码。

  • 它在RFC2045中定义为一个特殊的填充字符,如果编码数据末尾的可用位少于24位。


    等号(=)在某些形式的base64编码中用作填充。关于base64的维基百科文章包含了所有的细节。


    网址:http://www.hcidata.info/base64.htm

    将"mary had"编码为基64

    在本例中,我们使用的是一个简单的文本字符串("mary had"),但无论数据是什么(例如图形文件),原则都适用。要将输入数据的每24位转换为输出数据的32位,Base 64编码将24位分成4个6位的块。我们注意到的第一个问题是"mary had"不是3个字节的倍数——它是8个字节长。因此,最后一组位只有4位长。为了解决这个问题,我们添加了两个额外的"0"位,并在末尾加上"="来记住这个事实。如果要转换为base64的文本字符串是7个字节长,那么最后一个组将有2个位。在这种情况下,我们将添加4个额外的"0"位,并通过在末尾加"=="来记住这一事实。


    这是填充物。从http://en.wikipedia.org/wiki/base64:

    In theory, the padding character is not needed for decoding, since the
    number of missing bytes can be calculated from the number of Base64
    digits. In some implementations, the padding character is mandatory,
    while for others it is not used. One case in which padding characters
    are required is concatenating multiple Base64 encoded files.