首页 文章

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

提问于
浏览
229

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

提出了几个问题:

  • base64 字符串是否始终以 = 结尾?

  • 为什么 = 会在最后附加?

8 回答

  • 11

    它作为padding .

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

  • 210

    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= (没有空格)

  • 7

    来自Wikipedia

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

    因此,这是某种填充 .

  • 6
    • 将Base64编码的字符串填充为4个字符的长度,以便可以正确解码 .

  • 136

    如果编码数据末尾少于24位,则在RFC 2045中将其定义为特殊填充字符 .

  • 15

    等号(=)用作某些形式的base64编码中的填充 . base64上的Wikipedia article具有所有细节 .

  • 61

    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'位,并通过在末尾加上'=='来记住这个事实 .

  • 13

    它是填充物 . 来自http://en.wikipedia.org/wiki/Base64

    理论上,解码不需要填充字符,因为可以从Base64数字的数量计算丢失字节的数量 . 在一些实现中,填充字符是强制性的,而对于其他实现,则不使用填充字符 . 需要填充字符的一种情况是连接多个Base64编码文件 .

相关问题