PHP中的Xor加密

eme*_*his 8 php xor bitwise-operators bitwise-xor

我是Xor加密的新手,我在使用以下代码时遇到了一些问题:

function xor_this($string) {

// Let's define our key here
 $key = ('magic_key');

 // Our plaintext/ciphertext
 $text =$string;

 // Our output text
 $outText = '';

 // Iterate through each character
 for($i=0;$i<strlen($text);)
 {
     for($j=0;$j<strlen($key);$j++,$i++)
     {
         $outText .= $text{$i} ^ $key{$j};
         //echo 'i='.$i.', '.'j='.$j.', '.$outText{$i}.'<br />'; //for debugging
     }
 }  
 return $outText;
}
Run Code Online (Sandbox Code Playgroud)

当我运行它时,它适用于普通字符串,如'dog',但它只适用于包含数字的字符串,如'12345'.

展示...

xor_this('dog') ='UYV'

xor_this('123') =''

值得注意的是xor_this( xor_this('123') )='123',正如我所期望的那样.我很确定问题存在于我对位运算符的不稳定理解中,或者可能是PHP处理包含数字的字符串的方式.我敢打赌那里有一个聪明的人知道这里究竟出了什么问题.谢谢.

编辑#1:它不是真正的'加密'.我猜混淆是正确的术语,这就是我正在做的事情.我需要从用户传递包含不重要数据的代码,而不能轻易篡改它.他们正在离线完成定时活动,并通过此代码将时间提交到在线记分板.离线活动将模糊他们的时间(以毫秒为单位).我需要编写一个脚本来接收此代码并将其转回包含其时间的字符串.

eme*_*his -3

尽管有所有明智的建议,我还是以一种更简单的方式解决了这个问题:

我换了钥匙!事实证明,通过将密钥更改为更像这样的内容:

$key = 'ISINUS0478331006';

...它将生成可打印字符的混淆输出。

  • 你知道**为什么**它现在有效吗?如果没有,你怎么知道下次问题何时出现? (6认同)
  • 可能对您来说是一个解决方案,但对于其他遇到此问题的人来说却不是解决方案,因为它仅适用于您的危险角色。 (2认同)