Base64是一种将二进制数据转换成ASCII字符的编码方法,常用于在文本协议中传输二进制数据。通常情况下,只要输入数据一致,Base64编码的结果也应该是相同的。然而,我却遇到了不一致的情况:明明输入的是相同的数据,但得到的Base64编码结果却有所不同。这让我十分不解,因为按照Base64编码的原理,相同的输入理应产生相同的输出。来看几个在线编码的结果吧:
要编码的内容:Hello Base64 你还好吗?
得到不同结果:
SGVsbG8gQmFzZTY0IMTju7m6w8Lwo78=
SGVsbG8gQmFzZTY0IOS9oOWlveWlveivhO+8nw==
SGVsbG8gQmFzZTY0IOe8luegg+WQj+WQj+WPtyA==
SGVsbG8gQmFzZTY0IOS9oOi/mOWlveWQl++8nw==
SGVsbG8gQmFzZTY0IMTju7m6w8Lwo78=
经过查阅资料,原来有下面几种可能:
第一个可能的原因是输入数据本身不相同。即使看起来是相同的内容,可能在不可见的字符上有差异,比如换行符、空格等。
第二个可能是编码时使用的字符集不同。如果输入数据是以不同的字符集编码的,比如UTF-8和GBK,那么Base64编码的结果也会不同。
第三个可能是Base64编码实现的不同。不同的编程语言或库在处理Base64编码时可能会有细微的差别,比如是否包含换行符、是否进行URL安全的编码等。
还有一个可能性是编码过程中加入了额外的头信息或尾部签名,这也会导致编码结果的不同。
这就有意思了!如果我用最简单BASE64编码加密,更换一下编码别人是不是就看不出或者无法解密了呢?如果再加碘盐呢?