Php 如何将任何字符串转换为按位反转的ASCII字符串?
在PHP中,可以对字符串使用(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 -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
忽略它们或使用引号(我现在已经添加了它们)。这不仅仅是一个通知,而是一个解析错误。
。什么对你不起作用?我不明白这个问题