2016-12-01 2 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) дает мне x и encode(x) дает мне base64_B, как я могу генерировать base64_A из x или base64_B?

+0

The = is padding. например, исходная строка не была передана для соответствия спецификации. Может быть, 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 в результате получается байт, который затем может быть декодирован в кодировку символьной строкой.

Если вы используете неправильную кодировку, вы получите неверные результаты.

Смежные вопросы