我正在使用Socket.io和CryptoJS,当我尝试解密正在发送的消息时,在控制台中一直遇到此错误。
我以为是因为我两次发出相同的套接字,但是我不确定是因为。
客户端代码
$messageForm.submit(function (e) {
e.preventDefault();
socket.emit('send message', $messageBox.val(), function (data) {
$chat.append('<span class = "error"' + data + "</span><br/>");
});
$messageBox.val('');
});
socket.on('new message', function (data) {
$chat.append('<span class= "msg"<b>' + data.nick + ': </b>' + data.msg +
"<span/><br/>");
});
socket.on('whisper', function (data) {
$chat.append('<span class = "whisper"<b>' + data.nick + ': </b>' + data.msg +
"</span><br/>");
});
// socket.on('decryption', function (data) {
// $chat.append('<span class = "decryptionValue" <b>' + data.decryptValue +
// '</b></span><br/>');
// });
$decryptFrom.submit(function (e) {
e.preventDefault();
socket.emit('send message', function(data){
$messageRevealed.append('<span class = "decryptionValue" <b>' +
data.decryptValue +
'</b></span><br/>');
});
// socket.on('decryption', function (data) {
// })
});
服务器端代码
socket.on('send message', function (data, callback) {
var myPassword = '11111';
var encryption = CryptoJS.AES.encrypt(data, myPassword);
var decryption = CryptoJS.AES.decrypt(encryption, myPassword);
var msg = encryption.toString().trim();
if (msg.substr(0, 3) === '/w ') {
msg = msg.substr(3);
var ind = msg.indexOf(' ');
if (ind !== -1) {
var name = msg.substr(0, ind);
var msg = msg.substr(ind + 1);
if (name in users) {
users[name].emit('whisper', {
msg: msg,
nick: socket.nickname
});
} else {
callback('Error! Enter a valid user!');
}
} else {
callback("Error! Enter a pm");
}
} else {
io.sockets.emit('new message', {
msg: msg,
nick: socket.nickname
});
}
io.sockets.emit('decryption', {
decryptValue: decryption.toString(CryptoJS.enc.Utf8)
});
});
我一直认为无法通过eventListner正确读取消息,因为每当我尝试在没有事件侦听器的情况下进行操作时,每次通过发送消息进行解密都会始终有效。任何帮助将不胜感激。