Отправлять зашифрованное сообщение в комнату socket.io - PullRequest
0 голосов
/ 07 октября 2018

Я пытаюсь отправить зашифрованные данные с использованием протокола шифрования AES (отправить ключ AES по RSA клиенту), и после того, как я отправляю данные в комнату со многими пользователями, я не могу расшифровать сообщения на стороне клиента.Это связано с вопросом ключа AES.Каждый раз, когда я отправляю сообщение со стороны клиента на сервер, сервер генерирует новый AES-ключ, поэтому каждый раз, когда сообщения отправляются клиентом, он использует разные ключи.И после этого я сталкиваюсь со своей проблемой.Что я должен сделать, чтобы отправить зашифрованное сообщение AES в комнату socket.io?

Есть некоторый код

Сервер:

socket.on('send', function (data) {
    // Data decryption using AES
    let decryptedMessage = aesWrapper.decrypt(aesKey, data.message);
    let decryptedRoom = aesWrapper.decrypt(aesKey, data.room);
    data['message'] = decryptedMessage;
    data['room'] = decryptedRoom;

    // Trying to parse each user with unique AES key
    io_s.in(decryptedRoom).clients((error, clients) => {
        if (error) {
            console.log(error);
        } else {
            clients.forEach(client => {
                    let ecryptedMessage = aesWrapper.createAesMessage(aesKey, data['message']);
                    let ecryptedRoom = aesWrapper.createAesMessage(aesKey, data['room']);

                    let dataNew = { type: data.type, message: ecryptedMessage, room: ecryptedRoom }
                    console.log(dataNew);
                    socket.to(client).emit('message', dataNew);
            });
        }
    })
    console.log(socket.id);
});

По этому коду я работаю только с одним сокетом, поэтому шифрование работает только для него, а другие не могут расшифроватьit.

Я также пытался использовать шифрование RSA и отправлять AES-ключ для всех подключенных сокетов в комнату, но результат был тот же.

Код:

const newAesKey = aesWrapper.generateKey();
    let encryptedAesKey = rsaWrapper.encrypt(rsaWrapper.clientPub, (newAesKey.toString('base64')));
    socket.to(decryptedRoom).emit('send key from server to client', encryptedAesKey);

    socket.on('aes client encrypted message', () => {
        let ecryptedMessage = aesWrapper.createAesMessage(newAesKey, data['message']);
        console.log(ecryptedMessage);
        let ecryptedRoom = aesWrapper.createAesMessage(newAesKey, data['room']);
        let dataNew = { type: data.type, message: ecryptedMessage, room: ecryptedRoom, nickname: data.nickname }
        console.log(dataNew);
        socket.to(decryptedRoom).emit('message', dataNew);
    })

1 Ответ

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

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

keysUsers[socket.id] = aesKey;
...