两个Base64编码产生相同的解码

Ale*_*lds 3 base64 encoding objective-c decoding

两个编码可以映射到同一解码的预期行为吗?我正在尝试通过对base64编码的中间字符串进行完整性检查来解决数字签名问题.

例如,以下base64编码:

R0VUDQoNCg0KRnJpLCAwNCBTZXAgMjAwOSAxMTowNTo0OSBHTVQrMDA6MDANCi8=
Run Code Online (Sandbox Code Playgroud)

和:

R0VUCgoKRnJpLCAwNCBTZXAgMjAwOSAxMDozMzoyOCBHTVQrMDA6MDAKLw==
Run Code Online (Sandbox Code Playgroud)

都解码为:

GET


Fri, 04 Sep 2009 11:05:49 GMT+00:00
/
Run Code Online (Sandbox Code Playgroud)

(以字符转义,这就是:GET\n\n\n Fri, 04 Sep 2009 11:05:49 GMT+00:00\n/)

第一个编码来自测试两个在线base64编码器.

第二种编码来自这里提供的Objective-C base64编码器.

我用Obj-C编码器生成的结果有问题吗?

Fer*_*yer 14

使用Python证明字符串不相等的另一个例子:

>>> from base64 import decodestring as d
>>> a = "R0VUDQoNCg0KRnJpLCAwNCBTZXAgMjAwOSAxMTowNTo0OSBHTVQrMDA6MDANCi8="
>>> b = "R0VUCgoKRnJpLCAwNCBTZXAgMjAwOSAxMDozMzoyOCBHTVQrMDA6MDAKLw=="
>>> d(a)
'GET\r\n\r\n\r\nFri, 04 Sep 2009 11:05:49 GMT+00:00\r\n/'
>>> d(b)
'GET\n\n\nFri, 04 Sep 2009 10:33:28 GMT+00:00\n/'
>>> d(a) == d(b)
False
Run Code Online (Sandbox Code Playgroud)

较长的字符串使用CRLF-linebreaks,较短的一个普通LF.


sha*_*oth 8

很明显,编码的字符串具有类似于字母数字字符的模式,并且它们对应于换行符.所以不同之处在于,因为软件处理换行符(CR(\ r),LF(\n)或CRLF(\ r \n))的"Encode" - >"Decode"方式不同,所以这就是为什么你有这样的结果.

除此之外,没有两种不同的方法将给定的字符串编码为Base64,并且没有两种不同的方法来解码有效的Base64编码数据.