我知道什么是base64编码,以及如何在c#中计算base64编码,但是我已经看到过几次,当我将一个字符串转换为base64时,在结尾有一个=。
他提出了几个问题:
base64字符串总是以=结尾吗? 为什么an =要加在后面?
我知道什么是base64编码,以及如何在c#中计算base64编码,但是我已经看到过几次,当我将一个字符串转换为base64时,在结尾有一个=。
他提出了几个问题:
base64字符串总是以=结尾吗? 为什么an =要加在后面?
当前回答
从维基百科:
最后的'=='序列表示最后一组只包含一个字节,'='表示它包含两个字节。
因此,这是某种填充。
其他回答
http://www.hcidata.info/base64.htm
将“Mary had”编码为64进制
In this example we are using a simple text string ("Mary had") but the principle holds no matter what the data is (e.g. graphics file). To convert each 24 bits of input data to 32 bits of output, Base 64 encoding splits the 24 bits into 4 chunks of 6 bits. The first problem we notice is that "Mary had" is not a multiple of 3 bytes - it is 8 bytes long. Because of this, the last group of bits is only 4 bits long. To remedy this we add two extra bits of '0' and remember this fact by putting a '=' at the end. If the text string to be converted to Base 64 was 7 bytes long, the last group would have had 2 bits. In this case we would have added four extra bits of '0' and remember this fact by putting '==' at the end.
它起到填充的作用。
一个更完整的答案是,base64编码的字符串并不总是以一个=结尾,如果需要将字符串填充到适当的长度,它只会以一个或两个=结尾。
不。 将base64编码的字符串填充为长度为4个字符的倍数,以便能够正确解码。
问:base64字符串总是以=结尾吗?
答:不是。(usb字是base64编码到dXNi)
问:为什么an =要加在后面?
答:简而言之: 最后一个字符(=符号)仅作为补码(填充)添加到使用特定字符数对消息进行编码的最后过程中。
如果字符串有3个字符的倍数,则不会有=号,因为Base64编码每3个字节(一个字符=1字节),并在ASCII标准中将它们表示为4个可打印字符。
例子:
(a)如果你想编码
Abcdefg <=> [abc] [def] [g]
Base64处理第一个块(产生4个字符)和第二个块(当它们完整时)。但对于第三个,它将在输出中添加一个double ==,以完成4个所需字符。因此,结果将是QUJD REVG Rw==(不含空格)。
[ABC] => QUJD
[DEF] =>快节奏
[G] => Rw==
(b)如果你想编码ABCDEFGH <=> [ABC] [DEF] [GH]
类似地,它将在输出的末尾添加one =以获得4个字符。
结果将是QUJD REVG R0g=(不带空格)。
[ABC] => QUJD
[DEF] =>快节奏
[GH] => R0g=
从维基百科:
最后的'=='序列表示最后一组只包含一个字节,'='表示它包含两个字节。
因此,这是某种填充。