我尝试使用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);
})
答案 0 :(得分:0)
我已经通过添加数组变量解决了这个问题,我在其中为每个用户保存了aes-keys。
keysUsers[socket.id] = aesKey;