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.
很明显,编码的字符串具有类似于字母数字字符的模式,并且它们对应于换行符.所以不同之处在于,因为软件处理换行符(CR(\ r),LF(\n)或CRLF(\ r \n))的"Encode" - >"Decode"方式不同,所以这就是为什么你有这样的结果.
除此之外,没有两种不同的方法将给定的字符串编码为Base64,并且没有两种不同的方法来解码有效的Base64编码数据.