PHP 异或字符串

PHP XOR strings

我从 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!

有人可以向我解释这两个字符串的异或如何产生那行输出吗?

根据 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

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

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

整个字符串依此类推。