Я пытаюсь создать зашифрованный веб-чат с 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