C ++ — XOR строка в PHP с ключом является целым числом

Я делаю HTTP POST запрос на мой сервер от моего C++ приложение через sockets, Я буду XORing POST значения из моего C++ приложение, прежде чем они будут отправлены на мой сервер. Раз эти XORed POST значения отправляются на мой сервер. Мне понадобится иметь возможность «расшифровать» их перед обработкой значений на моем сервере.

мой C++ приложение в настоящее время XORing strings вот так

char *XOR(char *string)
{
//key = 0x10
char buffer[1000] = { 0 };
for (int i = 0; i < strlen(string); i++)
buffer[i] = string[i] ^ 0x10;
buffer[strlen(string)] = 0x00;
return buffer;
//yes I know, this function could be written much better. But that is not the point of this question...
}

Сейчас в PHP Я использую эту функцию для XOR string

function XOR($string, $key)
{
for($i = 0; $i < strlen($string); $i++)
$string[$i] = ($string[$i] ^ $key[$i % strlen($key)]);
return $string;
}

Я пытался назвать это так

$decryptedValue = XOR($_POST['postParam1'], "16");

А вот так

$decryptedValue = XOR($_POST['postParam1'], 16);

Но значение хранится в $decryptedValue никогда не совпадает с XORed значение отправлено из C++ приложение

Например, если я XOR "test" в моем C++ приложение с ключом как 0x10 возвращаемое значение

0x64, 0x75, 0x63, 0x64

Но если я XOR "test" на моем сервере возвращаемое значение

0x45, 0x53, 0x42, 0x42

0

Решение

Вам нужно преобразовать вашего персонажа в целое число с ordзатем XOR это с $key (без использования ключа в качестве строки), затем преобразуйте его обратно в символ с chr, В противном случае это XOR строковое значение со строкой, содержащей "16"что явно не дает того же результата.

function encrypt($string, $key)
{
for($i = 0; $i < strlen($string); $i++)
$string[$i] = chr(ord($string[$i]) ^ $key);
return $string;
}

(Моя версия PHP думает, что XOR является ключевым словом, поэтому я переименовал функцию для шифрования).

Тестировать:

encrypt("test", 16);
1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]