【问题标题】:Emit encrypted message to socket.io room向socket.io房间发送加密消息
【发布时间】:2019-03-12 08:14:06
【问题描述】:

我尝试使用 AES 加密协议(通过 RSA 向客户端发送 AES 密钥)发送加密数据,并且在我将数据发送到有许多用户的房间后,我无法在客户端解密消息。这与 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);
});

通过这段代码,我只使用一个套接字连接,因此加密只对他有效,其他人无法解密。

我也尝试使用 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);
    })

【问题讨论】:

    标签: javascript node.js sockets socket.io aes


    【解决方案1】:

    我通过添加数组变量来解决它,我在其中为每个用户保存 aes-keys。

    keysUsers[socket.id] = aesKey;
    

    【讨论】:

      猜你喜欢
      • 2023-03-27
      • 1970-01-01
      • 2017-09-27
      • 1970-01-01
      • 2021-09-04
      • 2013-08-20
      • 1970-01-01
      • 1970-01-01
      • 2015-08-06
      相关资源
      最近更新 更多