我在an answer on PPCG看到了这段代码:
echo BeeABBeeoBodBaBdOdPQBBgDQgDdp^"\n\n\t8b\n\n\t\nb&\nb b \n%%nb%%%\n%\nQ";
我知道PHP将未定义的常量转换为字符串,因此等效代码为:
echo 'BeeABBeeoBodBaBdOdPQBBgDQgDdp' ^ "\n\n\t8b\n\n\t\nb&\nb b \n%%nb%%%\n%\nQ";
这些的输出是:
Holy Hole In A Donut, Batman!
有人可以向我解释这两个字符串的XOR如何产生该输出线?
答案 0 :(得分:3)
根据this official example,在字符串上使用XOR
将对每个尊重字符的ASCII值进行操作,因此在您的示例中:
B
^ \n
= 66 ^ 10 = 72 = H
; e
^ \n
= 101 ^ 10 = 111 = o
; e
^ \t
= 101 ^ 9 = 108 = l
; 答案 1 :(得分:1)
这只是在整个字符串中一次对两个字符应用xor
。这是通过转换为ASCII来完成的,然后结果是ascii值,它是两个转换项之间的值的差异。请参阅PHP文档中的example 2。结果如下:
"B" ^ "\n" => 66 ^ 10 => 72 => "H"
依此类推整个字符串。