我知道什么是base64
编码以及如何base64
在C#中计算编码,但是我多次看到,当我将字符串转换为base64时,最后会有一个=
。
提出了一些问题:
- 难道一个
base64
字符串总是以结束=
? - 为什么
=
在末尾附加get?
我知道什么是base64
编码以及如何base64
在C#中计算编码,但是我多次看到,当我将字符串转换为base64时,最后会有一个=
。
提出了一些问题:
base64
字符串总是以结束=
?=
在末尾附加get?Answers:
它用作填充。
一个更完整的答案是,base64编码的字符串并不总是以a =
结尾,=
如果需要将字符串填充到适当的长度,它只会以一或两个结尾。
=
就足够了。如果您想找到边界,则应始终存在一个终止符(并且仍然只需要一个字符)。Base64的整个填充概念只是个脑子……
base64
通过插图和示例有效地解释填充。Wikipedia的当前链接与@NH完全无关。提到。
1-不
2-简短的回答:第65个字符(“ =符号”)仅在消息编码的最终过程中用作补充。
如果您的字符串具有3个字符的倍数,则不会有'='符号,因为Base64
编码使用每个三个字节(8位)并将它们表示为ASCII标准中的四个可打印字符。
细节 :
(a)如果要编码
ABCDEFG <=> [ ABC
] [ DEF
] [G
Base64
将处理(产生4个字符)第一个块和第二个块(因为它们完成了),但是对于第三个块,它将==
在输出中添加一个双精度 字以完成所需的4个字符。因此,结果将是 QUJD REVG Rw == (无空格)
(b)如果您想编码...
ABCDEFGH <=> [ ABC
] [ DEF
] [GH
同样,它将=
在输出的末尾仅添加一个以获取4个字符,结果将为 QUJD REVG R0g = (无空格)
等号(=)用作base64编码的某些形式的填充。有关base64 的维基百科文章提供了所有详细信息。
它是填充。从http://en.wikipedia.org/wiki/Base64:
从理论上讲,不需要填充字符,因为可以从Base64位数计算出丢失的字节数。在某些实现中,填充字符是强制性的,而对于其他实现则不使用。需要填充字符的一种情况是串联多个Base64编码的文件。
decode(encode(A)+encode(B))=A+B
可以使用填充,但不能不使用。
http://www.hcidata.info/base64.htm
将“ Mary had”编码为Base 64
在此示例中,我们使用一个简单的文本字符串(“ Mary had”),但是无论数据是什么(例如图形文件),该原理都适用。为了将每24位输入数据转换为32位输出,Base 64编码将24位拆分为4个6位的块。我们注意到的第一个问题是“ Mary have”不是3字节的倍数-它是8字节长。因此,最后一组位只有4位长。为了解决这个问题,我们添加了两个额外的位“ 0”,并在末尾添加“ =”来记住这一事实。如果要转换为Base 64的文本字符串长7个字节,则最后一组将具有2位。在这种情况下,我们将添加四个额外的位“ 0”,并通过在最后放置“ ==”来记住这一事实。