1
180
你认为填充是不必要的结论是正确的。总是可以从编码序列的长度中明确地确定输入的长度。 然而,填充在base64编码的字符串以丢失单个序列长度的方式连接的情况下是有用的,例如,在非常简单的网络协议中可能会发生这种情况。 如果 取消添加 字符串是串联的,不可能恢复原始数据,因为每个序列末尾奇数字节数的信息丢失。但是,如果使用填充序列,就不会产生歧义,而且整个序列可以正确解码。 编辑:插图假设我们有一个程序,base64对单词进行编码、连接并通过网络发送它们。它对“I”、“AM”和“TJM”进行编码,将结果不加填充地夹在一起并进行传输。
为什么不设计一个协议,在每个单词前面加上一个整数长度呢?然后接收器可以正确解码流,不需要填充。 知道 开始编码之前我们正在编码的数据的长度。但是,如果我们不是用文字,而是用现场摄像机来编码视频片段呢?我们可能事先不知道每一块的长度。 如果协议使用padding,则根本不需要传输长度。当数据从摄像机输入时,可以对其进行编码,每个块以填充结束,接收器将能够正确解码流。 显然,这是一个非常做作的例子,但也许它说明了为什么填充在某些情况下可能会有帮助。 |
2
33
什么是填充字符?填充字符有助于满足长度要求,并且没有任何意义。 如果任意要求所有字符串的长度都是8个字符,则数字640可以使用前面的0作为填充字符来满足此要求,因为它们没有意义,“00000640”。 二进制编码字节范式: 字节是事实上的标准度量单位,任何编码方案都必须与字节相关。 基256 基数16 基数64 与base256和base16不同,它不能均匀地适应字节范式(base32也不能)。所有base64字符都可以用6位表示,比完整字节少2位。 我们可以用分数表示base64编码与字节范式: . 减少的这个分数是3字节超过4个字符。 Base64编码只能保证即使使用3字节束进行测量, 与base16和base256不同,base16和base256的每个字节都可以独立存在。 所以 即使编码在没有填充字符的情况下也可以正常工作,是否鼓励填充?
作为反例,有些标准 JOSE 不允许填充字符。在这种情况下,如果缺少某些内容,加密签名将不起作用,或者其他非base64字符将丢失(如“.”)。虽然没有对长度进行假设,但不需要填充,因为如果出现错误,填充就不起作用。 这正是 base64
实例以下是RFC4648表格示例( http://tools.ietf.org/html/rfc4648#section-8 ) “BASE64”函数中的每个字符使用一个字节(base256)。然后将其转换为base64。
这里有一个编码器,你可以玩: http://www.motobit.com/util/base64-decoder-encoder.asp |
3
2
这只是我的一个理论,我不能提供任何来源,但我认为填充字符只能用来
一些实现
最小的
简单一点。特别是,如果算法将编码字符串放入
但是,如果不允许算法假设填充存在,
和
它使用
我个人认为填充不再起任何作用,但回到CPU和RAM不够丰富的时候,这个小小的优化可能已经很重要了。但我怀疑这有多重要。。。当fed输入被随机截断时,一个好的实现仍然需要做一些明智的事情,而IMO将提供处理未添加的输入的能力,而不需要额外的成本。 |
g00dds · 如何在bash中从文件中的每一行解码base64? 2 年前 |
a4w · 使用base64编码大文件 6 年前 |
Roni Gadot · C-调用函数时出现问题 6 年前 |
Joe Everyone · Base 64解码+编码产生不同的结果 6 年前 |
user9503597 · 无法在模板上呈现PIL对象base64图像 6 年前 |
user8181313 · 从数据库检索时图像损坏 6 年前 |