包含空字节的Base64编码输入

时间:2018-11-23 15:32:24

标签: php python base64

基于PHP的网站向我返回了base64编码的字符串,该字符串是序列化数据的base64编码。当我手动对解码的字符串进行base64编码时,会得到不同的结果。

因此,我进一步研究了它,发现序列化的数据包含空字节。

Base64编码的字符串:

TzoxMDoiRXhwcmVzc2lvbiI6Mzp7czoxNDoiAEV4cHJlc3Npb24Ab3AiO3M6MzoiZGl2IjtzOjE4OiIARXhwcmVzc2lvbgBwYXJhbiMi2Y7ZiO1M7E7Z1O2E6Mjp7Z1O2M6E2M7E7Z1O3E6E7M1E7M6E7M1E7M6E7M6E7M6E7M6E7M6E7M6E7M6E7M6E7M6E7E7M0E7E7M0E7E7M0E0E0E0E0E0B,作用;

下面是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                                             |;}|

如您所见,它包含空字节。

那么,如果字符串包含空字节,该如何对这样的字符串进行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解决方案会很棒。

谢谢。

0 个答案:

没有答案
相关问题