JSON.stringify вызывает странную строку только для чтения при попытке итерации - PullRequest
0 голосов
/ 19 апреля 2019

Я пытаюсь перебрать строку, но, похоже, получаю странное нарушение прав доступа. Проблема возникает при передаче значения, возвращаемого из JSON.stringify, потому что данные кажутся доступными только для чтения, после многих попыток использовать хакерские методы. чтобы решить проблему, мне не удалось это сделать.

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

Код ниже работает безупречно, когда защищенный фрагмент данных не передается

    xor_swap(keys, data)
    {
        for(var i = 0; i < data.length; i++)
            data[i] ^= this.xor_key_exchange(keys, i);

        return data.toString('utf8');
    }

Как бы то ни было, при применении параметра (например, JSON.stringify) данные становятся защищенными, и, независимо от того, что я делаю, данные кажутся неизменяемыми.

     var enc = this.xor_swap(keys,JSON.stringify(data));

Обратите внимание, что введенные данные полностью верны, я проверял это много раз.

Конечно, ожидаемый результат заключается в том, что строка должна быть итеративной, и после разговора с несколькими людьми, которые имеют большой опыт работы с nodejs, они не могут понять, почему возникает эта проблема.

Я не использую строгий режим для тех, кто спрашивает.

Спасибо всем, кто может помочь мне с этой проблемой

Ответы [ 2 ]

1 голос
/ 19 апреля 2019

В Javascript string является неизменным.Вы не можете сделать следующее

var a = 'hello';
a[1] = 'a' // try change 'e' to 'a', not possible
console.log(a)
JSON.stringify() возвращает string, который по определению равен immutable.

Таким образом, это назначение здесь недействительно

data[i] ^= this.xor_key_exchange(keys, i);
0 голосов
/ 19 апреля 2019

спасибо за ваш ответ, я заметил, что преобразование в строку действительно является неизменным.

Итак, я решил эту проблему, просто преобразовав строку в буфер, выполнив мой xor, а затем просто преобразовавбуферизировать обратно обратно к строке utf8.

    xor_swap(keys, data)
    {
        var buf = Buffer.from(data);

        for(var i = 0; i < buf.length; i++)
            buf[i] ^= Math.abs(this.xor_key_exchange(keys, i));

        return buf.toString('utf8');
    }

Большое спасибо за вашу помощь

...