Я новичок в шифровании 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;
}
Когда я запускаю это, оно работает для обычных строк, например, «собака», но только частично работает для строк, содержащих числа, например, «12345».
Для демонстрации ...
xor_this('dog')
= 'UYV'
xor_this('123')
= ''
Также интересно отметить, что xor_this( xor_this('123') )
= '123', как я и ожидаю. Я почти уверен, что проблема кроется где-то в моем шатком понимании побитовых операторов, ИЛИ, возможно, способа, которым PHP обрабатывает строки, содержащие числа. Бьюсь об заклад, есть кто-то умный, который точно знает, что здесь не так. Спасибо.
РЕДАКТИРОВАТЬ # 1: Это не «шифрование». Я думаю, что запутывание является правильным термином, который я и делаю. Мне нужно передать код, содержащий неважные данные от пользователя, чтобы они не могли легко его изменить. Они завершают задание по времени в автономном режиме и отправляют свое время в онлайн-табло с помощью этого кода. В автономном режиме запутывает свое время (в миллисекундах). Мне нужно написать скрипт для получения этого кода и вернуть его обратно в строку, содержащую их время.