Суть вопроса, есть код на стороне скомпилированного модуля
std::string xor_encryption(std::string data)
{
char key[] = "<KEY>";
std::string output = data;
for (int i = 0; i < data.size(); i++)
output[i] = data[i] ^ key[i % (sizeof(key) / sizeof(char))];
return output;
}
#include "base64.h"
std::string xorb64_string(std::string data, bool is_encrypted = false)
{
if (is_encrypted)
data = base64_decode(data);
data = xor_encryption(data);
if (is_encrypted)
return data;
return base64_encode((unsigned char*)data.c_str(), data.length());
}
Есть код на стороне хоста:
function xor_string($data , $key = "<KEY>")
{
$l = strlen($data);
$k = strlen($key);
$r = '';
for($i = 0; $i < $l; $i++)
{
//echo strval($i) . " " . strval($k) . ": " . strval($i % $k) . ". ";
$r .= $data[$i] ^ $key[$i % $k];
}
return $r;
}
function get_post_safe_encrypted($name, $ignore_die = null)
{
echo "SafeEncryptedKey: " . $name;
$post_safe = get_post_safe($name, $ignore_die);
echo ", PostSafe: " . $post_safe;
$decoded = base64_decode($post_safe);
//echo ", Base64Decoded: " . $decoded;
$decrypted = xor_string($decoded);
echo ", Decrypted2: " . $decrypted;
return $decrypted;
}
В общем смысл такой, клиентский модуль производит запрос с параметрами к серверу в виде зашифрованной строки, сервер же в свою очередь расшифровывает это и проивзодит некоторые манипуляции. На данный момент вывод такой
SafeEncryptedKey: key, PostSafe: IQYzIwkdNx8WORw+BWV8W3skM1QcLh8kbjYeMQpWAzULFj8/My8yQmIJDA8eNTcLLi4PGgYnI3BtKAcqHRcKAAdHHHVRGDxeBTNMXiZICRQBLx0ONztyMTcgHgtgFSUgMnw9dB1pHgssBm0JawUZIQFBMCdbJwYoPAVJZX5xZBwMfCx+MgYoLyMHHzsPMmcjIBx5cQBHNQkVARYKMwg0FFIDITYDIA8YLz57D346YS4RfTJJDhYdW3IiIzMYO28aKwEfNRkxLSAwXFEwdwwDLWEAah8gDCBhACgrcRkuBwBbFQIZdHInQi8VUA49Ijg4CjBFEwBFOiMzHQkUJS0WLxt0CBQqTQUMYFQHBRsoRhN4ERYrCS42HzgKMTgwPlYDHjhkHW49JzEkMToRFzd8OgIQXXYiJWpGPEs7DCFcTCshAy0CBQFcUwcIOzAKJyQ6FRobeQUleBY=, Decrypted2: oOrpLByVQqHsD79p0ajyXoKeEG2Re0nAPcTSTEW5,@M\[jyBif[WGuf[&m^YV^A,60>~Q*^F'2A"lcOf\]rd<xphJF!G`
y9dYY(JJwAjctUZ4[K<Mc_r6;.*UK4x3sTmhBFKs3b
mUo!X}Nt}fTbQcJ`eFAQhv/B?h$Z8kdJWI�YSPw]npttY~[HW~c2SMd&H>Ra^eJKmr\]oSApd.z6t`;bZH]ODy@E�tjtU]YdSP1Q9n
QMK%+ftN+g#d}GnDShvCpkuaJYp0P/ob�otc<Sv({)aqMC2g>P`F6)\oJlQ@^�@@o}Kua^_BTAd,W
Если внимательно приглядеться, то можно увидеть что часть данных расшифровалось, а именно вот этот фрагмент
oOrpLByVQqHsD79p0ajyXoKeEG2Re0nAPcTSTEW5
Почему то этот фрагмент равен длинне ключа шифрования, почему дешифровка происходит таким образом? По идее же все должно работать, код на PHP и C++ вроде как эквивалентен