Строка 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]);
Чтобы узнать, в каком месте выражение работает иначе, я бы разбил его на маленькие части, которые содержат только одно действие, и вывел в консоль, после чего сравнил работу:
$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);
Виртуальный выделенный сервер (VDS) становится отличным выбором
ПриветМногочисленные темы, созданные на StackOverflow говорят, что загрузить локальный
Понадобилось наложить водяной знак на изображение, нашел в интернете такой код:
С одного домена/сервера на другой идет ajax запрос, выходит ошибка No 'Access-Control-Allow-Origin' header is present on the requested resourceВ
Здравствуйте! Нужно найти зависимость в наборе чисел, при генерации использовался генератор случайных чисел, какой именно не знаюСгенерировано...