Php 如何将任何字符串转换为按位反转的ASCII字符串?

Php 如何将任何字符串转换为按位反转的ASCII字符串?,php,string,bit-manipulation,Php,String,Bit Manipulation,在PHP中,可以对字符串使用(~),例如: $ php -r "echo ~'šœ—ݶ';" :^:lk<b=I 理论上,您只需将~生成的数据放回代码中,~再将其放回,然后恢复原始字符串。在实践中,这并不奏效,因为二进制数据可能会被中间控制台和/或文本编辑器、修订控制或FTP程序破坏。通过以某种方式对二进制数据进行编码,可以使其安全,例如base 64: echo base64_encode(~'HelloWorld'); t5qTk5CokI2Tmw== echo ~base64_

在PHP中,可以对字符串使用(
~
),例如:

$ php -r "echo ~'šœ—ݶ';"
:^:lk<b=I

理论上,您只需将
~
生成的数据放回代码中,
~
再将其放回,然后恢复原始字符串。在实践中,这并不奏效,因为二进制数据可能会被中间控制台和/或文本编辑器、修订控制或FTP程序破坏。通过以某种方式对二进制数据进行编码,可以使其安全,例如base 64:

echo base64_encode(~'HelloWorld');
t5qTk5CokI2Tmw==

echo ~base64_decode('t5qTk5CokI2Tmw==');
HelloWorld

也可以通过编程方式生成PHP文件来写入原始二进制数据:

file_put_contents('x.php', '<?php echo ~\'' . addcslashes(~'HelloWorld', '\\\'') . '\';');

文件内容('x.php','理论上,您可以将
~
生成的数据放回代码中,
~
再次读取,然后恢复原始字符串。在实践中,这不起作用,因为中间控制台和/或文本编辑器,或修订控制或FTP程序可能会损坏二进制数据。您可以使二进制数据afe以某种方式进行编码,例如base 64:

echo base64_encode(~'HelloWorld');
t5qTk5CokI2Tmw==

echo ~base64_decode('t5qTk5CokI2Tmw==');
HelloWorld

也可以通过编程方式生成PHP文件来写入原始二进制数据:

file_put_contents('x.php', '<?php echo ~\'' . addcslashes(~'HelloWorld', '\\\'') . '\';');

file\u put\u contents('x.php',”听起来您想要做的是反转每个字符的低位7位,但保持高位不变(因为对于ASCII,它应该始终为零)

对于单个字节,可以使用0x7f进行XORing。要对字符串中的所有字节执行XORing操作,需要创建一个长度相等的字符串,其字节均为0x7f。例如:

$a = "HelloWorld";
$b = $a ^ str_repeat("\x7f", strlen($a));

应该可以工作。

听起来您想要做的是反转每个字符的低位7位,但保持高位不变(因为对于ASCII,它应该始终为零)

对于单个字节,可以使用0x7f进行XORing。要在字符串中的所有字节上执行此操作,需要创建一个长度相等的字符串,其字节都是0x7f。因此,类似于:

$a = "HelloWorld";
$b = $a ^ str_repeat("\x7f", strlen($a));

应该可以工作。

我从您的第一个命令中得到一个错误。您是否缺少字符串周围的引号?@Barmar可能只是注意到了,请添加
-d error\u reporting=7
以忽略它们或使用引号(我现在添加了它们)。这不仅仅是一个通知,它是一个
分析错误
。什么对你不起作用?我不明白。我从你的第一个命令中得到一个错误。你是否缺少字符串周围的引号?@Barmar可能只是通知,请添加
-d error\u reporting=7
忽略它们或使用引号(我现在已经添加了它们)。这不仅仅是一个通知,而是一个
解析错误。
。什么对你不起作用?我不明白这个问题