Encrypt chat message
This commit is contained in:
@ -237,7 +237,10 @@ namespace RageCoop.Client
|
||||
case PacketType.ChatMessage:
|
||||
{
|
||||
|
||||
Packets.ChatMessage packet = new Packets.ChatMessage();
|
||||
Packets.ChatMessage packet = new Packets.ChatMessage((b) =>
|
||||
{
|
||||
return Security.Decrypt(b);
|
||||
});
|
||||
packet.Unpack(data);
|
||||
|
||||
Main.QueueAction(() => { Main.MainChat.AddMessage(packet.Username, packet.Message); return true; });
|
||||
|
@ -3,6 +3,7 @@ using GTA.Math;
|
||||
using GTA.Native;
|
||||
using Lidgren.Network;
|
||||
using RageCoop.Core;
|
||||
using System;
|
||||
|
||||
namespace RageCoop.Client
|
||||
{
|
||||
@ -164,7 +165,10 @@ namespace RageCoop.Client
|
||||
{
|
||||
NetOutgoingMessage outgoingMessage = Client.CreateMessage();
|
||||
|
||||
new Packets.ChatMessage() { Username = Main.Settings.Username, Message = message }.Pack(outgoingMessage);
|
||||
new Packets.ChatMessage(new Func<string, byte[]>((s) =>
|
||||
{
|
||||
return Security.Encrypt(s.GetBytes());
|
||||
})) { Username = Main.Settings.Username, Message = message }.Pack(outgoingMessage);
|
||||
|
||||
Client.SendMessage(outgoingMessage, NetDeliveryMethod.ReliableOrdered, (byte)ConnectionChannel.Chat);
|
||||
Client.FlushSendQueue();
|
||||
|
@ -24,6 +24,10 @@ namespace RageCoop.Client
|
||||
{
|
||||
return new CryptoStream(new MemoryStream(data), ClientAes.CreateEncryptor(), CryptoStreamMode.Read).ReadToEnd();
|
||||
}
|
||||
public byte[] Decrypt(byte[] data)
|
||||
{
|
||||
return new CryptoStream(new MemoryStream(data), ClientAes.CreateDecryptor(), CryptoStreamMode.Read).ReadToEnd();
|
||||
}
|
||||
public void SetServerPublicKey(byte[] modulus, byte[] exponent)
|
||||
{
|
||||
var para = new RSAParameters();
|
||||
|
@ -155,6 +155,16 @@ namespace RageCoop.Core
|
||||
|
||||
internal class ChatMessage : Packet
|
||||
{
|
||||
private Func<string, byte[]> crypt;
|
||||
private Func<byte[], byte[]> decrypt;
|
||||
public ChatMessage(Func<string,byte[]> crypter)
|
||||
{
|
||||
crypt = crypter;
|
||||
}
|
||||
public ChatMessage(Func<byte[], byte[]> decrypter)
|
||||
{
|
||||
decrypt = decrypter;
|
||||
}
|
||||
public string Username { get; set; }
|
||||
|
||||
public string Message { get; set; }
|
||||
@ -166,20 +176,14 @@ namespace RageCoop.Core
|
||||
|
||||
List<byte> byteArray = new List<byte>();
|
||||
|
||||
byte[] usernameBytes = Encoding.UTF8.GetBytes(Username);
|
||||
byte[] messageBytes = Encoding.UTF8.GetBytes(Message);
|
||||
|
||||
// Write UsernameLength
|
||||
byteArray.AddRange(BitConverter.GetBytes(usernameBytes.Length));
|
||||
|
||||
// Write Username
|
||||
byteArray.AddRange(usernameBytes);
|
||||
byteArray.AddString(Username);
|
||||
|
||||
// Write MessageLength
|
||||
byteArray.AddRange(BitConverter.GetBytes(messageBytes.Length));
|
||||
|
||||
// Write Message
|
||||
byteArray.AddRange(messageBytes);
|
||||
byteArray.AddArray(crypt(Message));
|
||||
|
||||
byte[] result = byteArray.ToArray();
|
||||
|
||||
@ -197,9 +201,7 @@ namespace RageCoop.Core
|
||||
int usernameLength = reader.ReadInt();
|
||||
Username = reader.ReadString(usernameLength);
|
||||
|
||||
// Read message
|
||||
int messageLength = reader.ReadInt();
|
||||
Message = reader.ReadString(messageLength);
|
||||
Message = decrypt(reader.ReadByteArray()).GetString();
|
||||
#endregion
|
||||
}
|
||||
}
|
||||
|
@ -477,7 +477,10 @@ namespace RageCoop.Server
|
||||
case PacketType.ChatMessage:
|
||||
{
|
||||
|
||||
Packets.ChatMessage packet = new();
|
||||
Packets.ChatMessage packet = new((b) =>
|
||||
{
|
||||
return Security.Decrypt(b,sender.EndPoint);
|
||||
});
|
||||
packet.Unpack(data);
|
||||
|
||||
ChatMessageReceived(packet.Username,packet.Message, sender);
|
||||
@ -785,14 +788,20 @@ namespace RageCoop.Server
|
||||
|
||||
_worker.QueueJob(() => API.Events.InvokeOnChatMessage(message, sender));
|
||||
|
||||
var msg=MainNetServer.CreateMessage();
|
||||
new Packets.ChatMessage()
|
||||
foreach(var c in Clients.Values)
|
||||
{
|
||||
Username=name,
|
||||
Message=message
|
||||
}.Pack(msg);
|
||||
|
||||
MainNetServer.SendToAll(msg, NetDeliveryMethod.ReliableOrdered, (int)ConnectionChannel.Chat);
|
||||
var msg = MainNetServer.CreateMessage();
|
||||
var crypt = new Func<string, byte[]>((s) =>
|
||||
{
|
||||
return Security.Encrypt(s.GetBytes(), c.EndPoint);
|
||||
});
|
||||
new Packets.ChatMessage(crypt)
|
||||
{
|
||||
Username=name,
|
||||
Message=message
|
||||
}.Pack(msg);
|
||||
MainNetServer.SendToAll(msg, NetDeliveryMethod.ReliableOrdered, (int)ConnectionChannel.Chat);
|
||||
}
|
||||
|
||||
Logger?.Info(name + ": " + message);
|
||||
}
|
||||
@ -800,7 +809,10 @@ namespace RageCoop.Server
|
||||
{
|
||||
if(target == null) { return; }
|
||||
var msg = MainNetServer.CreateMessage();
|
||||
new Packets.ChatMessage()
|
||||
new Packets.ChatMessage(new Func<string, byte[]>((s) =>
|
||||
{
|
||||
return Security.Encrypt(s.GetBytes(), target.EndPoint);
|
||||
}))
|
||||
{
|
||||
Username= name,
|
||||
Message=message,
|
||||
|
Reference in New Issue
Block a user