我是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:它不是真正的’加密’.我猜混淆是正确的术语,这就是我正在做的事情.我需要传递一个包含来自用户的不重要数据的代码,而不能轻易地篡改它.他们正在离线完成定时活动,并通过此代码将时间提交到在线记分板.离线活动将模糊他们的时间(以毫秒为单位).我需要编写一个脚本来接收此代码并将其转回包含其时间的字符串.
我是怎么做到的,可能对某人有帮助……
原文链接:https://www.f2er.com/php/136432.html$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); }