Base64编码是否总是一对一的?

7

在 Base64 编码算法中,对于两个不同的输入值能否获得两个完全相同的编码值?

以另一个算法为例,考虑一个将下划线替换为字母 X 的函数。

Foo_Bar = FooXBar
FooXBar = FooXBar

这种情况在Base64编码中可能会发生吗?

3
这可能会引起您的兴趣:https://dev59.com/PlQJ5IYBdhLWcg3wuob7 - SlowLearner
..正确,但方向相反。 - mykhal
2个回答

7

不,这是不可能的。Base64是一种无损转换(甚至需要33%的额外空间)。在数学术语中,Base64函数是一个单射函数

请注意HTTP基本访问身份验证如何使用此编码来进行用户名和密码的验证。任何人都可以从编码后的字符串中获取原始字符串,因此应该仅在HTTPS下使用此身份验证。

您还可以在维基百科上找到有关Base64的更多详细信息。


5
请注意,虽然碰撞是不可能的,但 base64 不是一个双射函数,而只是一个单射函数——同一份数据可以用多种方式在 base64 中编码(至少由于结尾处的填充,但也可能由于字符串中间的填充和空格)。 - Tej Chajed

3
不,Base64仅是一种将二进制数据编码为可打印字符的方式。
严格来说,它只是一种数制,就像二进制(基数2)、十进制(基数10)或十六进制(基数16)一样。就像你可以在这些之间无损转换一样,你也可以在Base64之间进行转换。事实上,数制在数学上并不重要,只有在表示和人类使用时才有用,无论使用什么数制,数学都是等效的。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接