【发布时间】: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