微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

PHP中的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;
}

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

展示…

xor_this(‘dog’)=’UYV’

xor_this(‘123’)=”

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

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

我是怎么做到的,可能对某人有帮助……
$msg = 'say hi!';
$key = 'whatever_123';

// print,and make unprintable chars available for a link or alike.
// using $_GET,PHP will urldecode it,if it was passed urlencoded
print "obfuscated,ready for url: " . urlencode(obfuscate($msg,$key)) . "\n";
print "deObfuscated: " . obfuscate(obfuscate($msg,$key),$key);


function obfuscate($msg,$key) {
    if (empty($key)) return $msg;
    return $msg ^ str_pad('',strlen($msg),$key);
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐