Сайт на основе 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.
Спасибо.