gpt4 book ai didi

encoding - 是否有可能与 base64 编码/解码发生冲突

转载 作者:行者123 更新时间:2023-12-03 15:11:57 27 4
gpt4 key购买 nike

在这里问了一个类似的问题:Is base64 encoding always one to one

显然答案(对类似问题)是肯定的。我已经知道了,但是我很想知道为什么这两个字符串在 Base64 解码后看起来是等效的解释:

cwB0AGQAAG==

cwB0AGQAAA==

还有一件事......当您选择解码后的字符串然后重新编码时,两者都重新编码为相同的值:cwB0AGQAAA==

发生了什么?

最佳答案

base64 不是一对一的;有多种方法可以对相同的字节进行编码。您所看到的是对字符串末尾的填充进行编码的多种方法。

base64 将字节(每个 8 位)编码为 base 64。base64 中的一个字符编码 6 位,因此四个 base64 字符可以处理三个字节。当输入的长度不是三个字节的倍数时,base64 使用 =作为填充字符来填充最后一组四个 base64 字符。 XXX=表示只使用组的前两个字节(其中 XXX 代表三个任意 base64 字符),而 XX==表示只应使用第一个字节。

您示例中的最后一组是 AA== , 编码一个 0 字节。然而,AA部分可以编码 12 位,其中最低有效的 4 位在解码时被忽略,因此您可以使用来自 A-P 的任何字符。并得到相同的结果。当您使用编码器时,它总是为这四位选择零,因此您会返回 AA== .

填充实际上在 base64 中更加复杂。从技术上讲,您可以排除 =人物;字符串的长度将表明它们的缺失(根据维基百科,并非所有解码器都支持这一点)。填充有用的地方在于它允许安全地连接 base64 字符串,因为每组四个字符串都以相同的方式解释。但是,这意味着填充也可以出现在字符串的中间,这意味着可以以各种方式对字节序列进行编码。您还可以包含空格或换行符,它们都被忽略。

尽管如此,base64 仍然是单射的,这意味着如果 x != y,那么 base64(x) != base64(y);因此,您不会发生冲突,并且始终可以取回原始数据。但是,base64 不是满射的:有很多方法可以对相同的数据进行编码。

关于encoding - 是否有可能与 base64 编码/解码发生冲突,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53225750/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com