Этот код должен возвращать тот же результат.
Единственная проблема, о которой я могу думать, это то, что тип данных внутри "$ header [$ i]" - это строка, а не целое число. Это заставляет PHP анализировать ASCII-код $ header [$ i] вместо значения, которое он должен представлять:
Ожидаемый результат:
$xorKey = 16909060;
$data = 1337;
$data = ((16 * ($xorKey ^ (~$data & 0xFF)))
| (($xorKey ^ (~$data & 0xFF)) >> 4)) & 0xFF;
echo $data; // int 60
В то время как использование строки приводит к следующему:
$xorKey = 16909060;
$data = '1337'; // HERE BE DRAGONS
$data = ((16 * ($xorKey ^ (~$data & 0xFF)))
| (($xorKey ^ (~$data & 0xFF)) >> 4)) & 0xFF;
echo $data; // int 112
Чтобы исправить это:
$xorKey = 16909060;
$data = '1337';
$data = intval($data); // Parse this string as an integer.
$data = ((16 * ($xorKey ^ (~$data & 0xFF)))
| (($xorKey ^ (~$data & 0xFF)) >> 4)) & 0xFF;
echo $data; // int 60