PHP XOR字符串

时间:2015-12-13 06:48:01

标签: php xor

我在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如何产生该输出线?

2 个答案:

答案 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;
  • ...

3v4l result

答案 1 :(得分:1)

这只是在整个字符串中一次对两个字符应用xor。这是通过转换为ASCII来完成的,然后结果是ascii值,它是两个转换项之间的值的差异。请参阅PHP文档中的example 2。结果如下:

"B" ^ "\n" => 66 ^ 10 => 72 => "H"

依此类推整个字符串。