Base64 кодирует ввод, содержащий нулевые байты - PullRequest
0 голосов
/ 23 ноября 2018

Сайт на основе PHP возвращает мне строку в кодировке base64, которая представляет собой кодировку base64 сериализованных данных.Когда я вручную base64 кодирую декодированную строку, я получаю другой результат.

Итак, я углубился в это и понял, что сериализованные данные содержат нулевые байты.

Строка в кодировке Base64:

* * 1006 TzoxMDoiRXhwcmVzc2lvbiI6Mzp7czoxNDoiAEV4cHJlc3Npb24Ab3AiO3M6MzoiZGl2IjtzOjE4OiIARXhwcmVzc2lvbgBwYXJhbXMiO2E6Mjp7aTowO2Q6ODtpOjE7ZDoyO31zOjk6InN0cmluZ2lmeSI7czo1OiI4IC8gMiI7fQ == 1008 * Ниже приведен шестнадцатеричная из base64 декодируется строка:.
$ echo "TzoxMDoiRXhwcmVzc2lvbiI6Mzp7czoxNDoiAEV4cHJlc3Npb24Ab3AiO3M6MzoiZGl2IjtzOjE4OiIARXhwcmVzc2lvbgBwYXJhbXMiO2E6Mjp7aTowO2Q6ODtpOjE7ZDoyO31zOjk6InN0cmluZ2lmeSI7czo1OiI4IC8gMiI7fQ==" | base64 -D | hexdump -C
00000000  4f 3a 31 30 3a 22 45 78  70 72 65 73 73 69 6f 6e  |O:10:"Expression|
00000010  22 3a 33 3a 7b 73 3a 31  34 3a 22 00 45 78 70 72  |":3:{s:14:".Expr|
00000020  65 73 73 69 6f 6e 00 6f  70 22 3b 73 3a 33 3a 22  |ession.op";s:3:"|
00000030  64 69 76 22 3b 73 3a 31  38 3a 22 00 45 78 70 72  |div";s:18:".Expr|
00000040  65 73 73 69 6f 6e 00 70  61 72 61 6d 73 22 3b 61  |ession.params";a|
00000050  3a 32 3a 7b 69 3a 30 3b  64 3a 38 3b 69 3a 31 3b  |:2:{i:0;d:8;i:1;|
00000060  64 3a 32 3b 7d 73 3a 39  3a 22 73 74 72 69 6e 67  |d:2;}s:9:"string|
00000070  69 66 79 22 3b 73 3a 35  3a 22 38 20 2f 20 32 22  |ify";s:5:"8 / 2"|
00000080  3b 7d                                             |;}|

Как вы можете видеть, он содержит нулевые байты

1013 * Итак,как я могу закодировать в base64 строку, подобную этой, если она содержит нулевые байты?

Я хотел бы внести некоторые изменения в сериализованные данные, а затем снова закодировать их в base64.

Как включить нульбайты в строке перед кодированием?

Поскольку строки заканчиваются нулевыми байтами в PHP и Python, как я понимаю.

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

$ t = "O: 10:" Выражение ": 3: {s: 14:" \ 0Expression \ 0op "; s: 3:" div "; s: 18:" \ 0Expression \ 0params "; a: 2: {i: 0; d: 8; i: 1; d: 2;} s: 9: "stringify"; s: 5: "8/2";} "

Я использую \ 0представлять нулевые байты, но выглядит так, как будто это неправильное представление нулевых байтов.

Было бы замечательно решение на PHP или Python.

Спасибо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...