Помогите переписать с php на js строку

249
30 августа 2017, 17:10

Строка php которую нужно переписать на js:

$res .= $str[$y] ^ chr($s[($s[$i] + $s[$j]) % 256]);

Уже всего столько перелопатил, столько вариантов опробовал, но всё как-то не корректно получается. Этими вариантами даже зря засорять сам вопрос не буду. Нужен тот кто действительно шарит в JS. Кто-нить может помочь?

У меня вышло вот это:

res += String.fromCharCode(str.charCodeAt(y) ^ s[(s[i] + s[j]) % 256]);

, но что-то тут не корректно ...так как результат php строки и js строки не совпадают...

=====================================================================

Понял, в чём разница между двумя строками при использовании мультибайтной кодировки, но как решить проблему так и не знаю:

Строка PHP:

chr - Возвращает символ по его коду

^ побитовая операция - "Исключающее ИЛИ" (http://php.net/manual/ru/language.operators.bitwise.php)

$str[$y] - это не обращение к символу с индексом $y в строке $str, это обращение к байту

 $res .= $str[$y] ^ chr($s[($s[$i] + $s[$j]) % 256]);

Строка JS:

charCodeAt() - возвращает числовое значение Юникода для символа по указанному индексу (за исключением кодовых точек Юникода, больших 0x10000).

String.fromCharCode() - возвращает строку, созданную из указанной последовательности значений Юникода. Этот метод возвращает примитивную строку, а не объект String.

res += String.fromCharCode(str.charCodeAt(y) ^ s[(s[i] + s[j]) % 256]);
Answer 1

Чтобы узнать, в каком месте выражение работает иначе, я бы разбил его на маленькие части, которые содержат только одно действие, и вывел в консоль, после чего сравнил работу:

$a = $s[$i] + $s[$j]; echo "\nA:"; var_dump($a);
$b = $a % 256; echo "\nB:"; var_dump($b);
$c = $s[$b]; echo "\nC:"; var_dump($c);
$d = chr($c); echo "\nD:"; var_dump($d);
$e = $str[$y]; echo "\nE:"; var_dump($e);
$f = $e ^ $d; echo "\nF:"; var_dump($f);
$res .= $f;
echo "\nResult:"; var_dump($res);
var a = s[i] + s[j]; console.log('A:', a);
var b = a % 256; console.log('B:', b);
var c = s[b]; console.log('C:', c);
var e = str.charCodeAt(y); console.log('E:', e);
var f = e ^ c; console.log('F:', f);
res += String.fromCharCode(f);
console.log('Result:', res);
READ ALSO
NULL при попытке загрузить локальный JSON-файл

NULL при попытке загрузить локальный JSON-файл

ПриветМногочисленные темы, созданные на StackOverflow говорят, что загрузить локальный

268
Наложение водяного знака на картинку

Наложение водяного знака на картинку

Понадобилось наложить водяной знак на изображение, нашел в интернете такой код:

379
No 'Access-Control-Allow-Origin' header is present on the requested resource

No 'Access-Control-Allow-Origin' header is present on the requested resource

С одного домена/сервера на другой идет ajax запрос, выходит ошибка No 'Access-Control-Allow-Origin' header is present on the requested resourceВ

286
Поиск зависимостей в наборе числ на php

Поиск зависимостей в наборе числ на php

Здравствуйте! Нужно найти зависимость в наборе чисел, при генерации использовался генератор случайных чисел, какой именно не знаюСгенерировано...

294