PHP XOR strings


PHP XOR strings

我在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将对每个字符的ASCII值进行操作,因此在您的示例中:

  • B^'n=66^10=72=H
  • e^'n=101^10=111=o
  • e^'t=101^9=108=l

3v4l结果

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

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

以此类推,贯穿整个字符串。