2016-12-01 95 views
0

我对这里的某些东西感到非常困惑。当我解码以下的base64字符串重新编码(base64)时base64字符串的解码值给出不同的输出

RgRaIY6KP0EIASwW7bCCVSJXCGJsYWhibGFoWAQAAAAASB1UcmFuc2FjdGlvbmFsOiBQYXNzd29yZCBSZXNldEIKAASKCT9YVegBjVITZXhhbXBsZTAxQGdtYWlsLmNvbQlRBAAAAABE6mh0dHBzOi8vd3d3LmV4YW1wbGUxLmNvbS9wYXNzd29yZC1yZXNldD9pZD02MkZZUFcmaGFzaD0yYmI0OTIwODBmMjJjNTZnNmNhYzAzNDlmNDNmNmRiYiZ1dG1fY2FtcGFpZ249VHJhbnNhY3Rpb25hbCUzQSUyMFBhc3N3b3JkJTIwUmVzZXQmdXRtX3NvdXJjZT1TcGFya1Bvc3QmdXRtX21lZGl1bT1lbWFpbCZ1dG1fdGVybT1UcmFuc2FjdGlvbmFsJTNBJTIwUGFzc3dvcmQlMjBSZXNldCZyZWZlcmVyPTYyRllQV0dReyJlbWFpbF91dWlkIjoiMTQ4MDUyNDU3ODQxMS4yODgyMDc0MDY3Nzc4OTUyODk5NTUzOTkiLCJiaW5kaW5nIjoibm90aWZpY2F0aW9ucyJ9 

输出是:

FZ!?A,�U"WwwwwwwwwXHTransactional: Aaaaaaaa Gggggg ?XU恍[email protected] QD駴tps://www.abcdefgh.com/endpoint--name?id=62FYPW&valu=2ffg92080f22c50c6grsd349frtyuio9&utm_campaign=Transactional%3A%20Password%20Reset&utm_source=SparkPost&utm_medium=email&utm_term=Transactional%3A%20Pppp%20Mainn&referer=62FYPWGQ{"email_user":"14785243699632.288207406700815289974144","binding":"notifications"}

但是当我尝试相同的输出值编码回的base64它给了我:

RgRaIY4/QQgBLBb9VSJXCHd3d3d3d3d3WARIHVRyYW5zYWN0aW9uYWw6IEFhYWFhYWFhIEdnZ2dnZwoEij9YVU1SE2V4YW1wbGUwMUBnbWFpbC5jb20JUQRE9HRwczovL3d3dy5hYmNkZWZnaC5jb20vZW5kcG9pbnQtLW5hbWU/aWQ9NjJGWVBXJnZhbHU9MmZmZzkyMDgwZjIyYzUwYzZncnNkMzQ5ZnJ0eXVpbzkmdXRtX2NhbXBhaWduPVRyYW5zYWN0aW9uYWwlM0ElMjBQYXNzd29yZCUyMFJlc2V0JnV0bV9zb3VyY2U9U3BhcmtQb3N0JnV0bV9tZWRpdW09ZW1haWwmdXRtX3Rlcm09VHJhbnNhY3Rpb25hbCUzQSUyMFBwcHAlMjBNYWlubiZyZWZlcmVyPTYyRllQV0dReyJlbWFpbF91c2VyIjoiMTQ3ODUyNDM2OTk2MzIuMjg4MjA3NDA2NzAwODE1Mjg5OTc0MTQ0IiwiYmluZGluZyI6Im5vdGlmaWNhdGlvbnMifQ== 

这里发生了什么?

如果decode(base64_A)是给我xencode(x)给我base64_B,我怎么能生成base64_Axbase64_B

+0

=是填充。例如,原始字符串尚未被传递以符合规范。也许最后一个crlf?当你解码你的编码决定的字符串时,你会得到什么? –

+0

当我解码已编码的决定字符串时,我得到Reset&utm_source = SparkPost&utm_medium = email&utm_term = Transactional%3A%20Password%20Reset&ref这与我解码第一个base64字符串时得到的相同。 –

+0

我可以确认最后没有CRLF :) –

回答

1

您显示的解码文本包含非ASCII字符。 Base64仅对二进制数据进行编码,因此编码/解码文本时必须考虑字符编码。

对base64进行编码时,必须先将字符串字符集编码为字节,例如使用UTF-8,然后可以使用base64对这些字节进行编码。

解码base64时,结果是字节,然后可以将字节解码为字符串。

如果使用错误的字符集,您将得到不正确的结果。