Javascript Object теряет свои функции при передаче через Socket.io - PullRequest
0 голосов
/ 20 октября 2018

Я пытаюсь создать зашифрованный веб-чат с Node.js, используя Socket.io и node-forge (пакет npm, который реализует некоторые алгоритмы шифрования).

Моя проблемачто всякий раз, когда я отправляю зашифрованное сообщение (которое по какой-то причине является объектом), оно теряет все свои функции, необходимые для дешифрования сообщения на другой стороне, мой код шифрования / дешифрования выглядит следующим образом:

function encrypt (bytesToEncrypt){
    cipher = forge.cipher.createCipher('AES-CBC', key);
    cipher.start({'iv': iv});
    cipher.update(forge.util.createBuffer(bytesToEncrypt));
    cipher.finish();
    var encrypted = cipher.output;
    console.log(encrypted.toHex());
    return encrypted
}

function decrypt (bytesToDecrypt){
    decipher = forge.cipher.createDecipher('AES-CBC', key);
    decipher.start({'iv': iv});
    decipher.update(bytesToDecrypt);
    var result = decipher.finish(); // check 'result' for true/false
    console.log('decryption result = ' + result);
    // outputs decrypted hex
    console.log(decipher.output.toString());
    return decipher.output.toString();
}

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

socket.emit('chat message', encrypt("Hello world"));

и расшифровываю его на другой стороне:

    socket.on('chat message', function(msg){
        decrypt(msg)
    });

Я получаю следующую ошибку:

Uncaught TypeError: e.getBytes is not a function
at n.o.ByteStringBuffer.putBuffer (forge.min.js:1)
at a.cipher.BlockCipher.n.update (forge.min.js:8923)
at decrypt ((index):68)

потому что всякий раз, когда объект отправляется через socket.io, он теряет свои функции (в данном случае .getBytes ()).Мне было интересно, если, возможно, было исправление этой проблемы, или лучше всего начать с других вариантов.

Я также публикую ссылку на суть самого проекта (может бытьлегче понять)

https://gist.github.com/goncalo-ribeiro/b84fca008b3948cd3061a5c47b1c9b65

1 Ответ

0 голосов
/ 20 октября 2018

Как указал @Thomas, необходимо создать новый ByteStringBuffer с полученным сообщением.Таким образом, при получении нового сообщения должен выполняться следующий код:

    socket.on('chat message', function(msg){
        var message = new forge.util.ByteStringBuffer(msg.data);
        console.log(message)
        decrypt(message)
    });

Это создает новый объект ByteStringBuffer, который имеет методы, необходимые для расшифровки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...