Skip to content

Commit 1f24d55

Browse files
committed
encryption update
fix encryption issues make encryption optional edit readme
1 parent b4effd0 commit 1f24d55

File tree

8 files changed

+186
-26
lines changed

8 files changed

+186
-26
lines changed

README.md

Lines changed: 92 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ Ensure you are using the latest version by adjusting the version number accordin
4242
## Getting Started
4343
Here are a few simple examples to help you get started with nexo-net.
4444

45-
## Creating a Test Server
45+
## Creating a Test Server without Encryption
4646

4747
```java
4848
import com.nexoscript.nexonet.server.Server;
@@ -51,7 +51,7 @@ import packets.com.nexoscript.MessagePacket;
5151
public class Testserver {
5252

5353
public static void main(String[] args) {
54-
Server server = new Server(true, true);
54+
Server server = new Server(true);
5555
server.getPacketManager().registerPacketType("MESSAGE_PACKET", MessagePacket.class);
5656
server.onClientConnect(client -> {
5757
System.out.println("Client connected with ID: " + client.getId());
@@ -80,7 +80,53 @@ public class Testserver {
8080
```
8181
This example demonstrates how to create a simple server that listens for incoming connections on port 1234.
8282

83-
## Creating a Test Client
83+
## Creating a Test Server with Encryption
84+
85+
```java
86+
package com.nexoscript;
87+
88+
import com.nexoscript.nexonet.api.crypto.CryptoType;
89+
import com.nexoscript.nexonet.api.crypto.KeySize;
90+
import com.nexoscript.nexonet.packet.crypto.CryptoManager;
91+
import com.nexoscript.nexonet.server.Server;
92+
import com.nexoscript.packets.BytePacket;
93+
import com.nexoscript.packets.MessagePacket;
94+
95+
public class MyServer {
96+
97+
public static void main(String[] args) {
98+
Server server = new Server(true);
99+
CryptoManager cryptoManager = new CryptoManager(server.getLogger());
100+
cryptoManager.initCrypto("secret.key", CryptoType.AES, KeySize.KEY_256);
101+
server.getPacketManager().registerPacketType("MESSAGE_PACKET", MessagePacket.class);
102+
server.getPacketManager().registerPacketType("BYTES_PACKET", BytePacket.class);
103+
server.onClientConnect(client -> {
104+
System.out.println("Client connected with ID: " + client.getId());
105+
MessagePacket messagePacket = new MessagePacket(cryptoManager.encryptString(command[2]));
106+
server.sendToClient(client.getId(), messagePacket);
107+
System.out.println("[System] -> Send Message to Client!");
108+
});
109+
server.onClientDisconnect(client -> {
110+
System.out.println("Client connected with ID: " + client.getId());
111+
});
112+
server.onServerReceived((client, packet) -> {
113+
System.out.println("Server received from client with ID: " + client.getId());
114+
if(packet instanceof MessagePacket messagePacket) {
115+
System.out.println(cryptoManager.decryptString(messagePacket.getMessage()));
116+
}
117+
});
118+
server.onServerSend((client, packet) -> {});
119+
server.start(1234);
120+
}
121+
}
122+
```
123+
This example demonstrates how to create a simple server with "encryption" that listens for incoming connections on port 1234.
124+
125+
## Warning
126+
If you use the Encryption Feature. Please use it on both Client Side and Server Side
127+
because when you use different problems can occur.
128+
129+
## Creating a Test Client without Encryption
84130

85131
```java
86132
import com.nexoscript.nexonet.client.Client;
@@ -89,7 +135,7 @@ import packets.com.nexoscript.MessagePacket;
89135
public class Testclient {
90136

91137
public static void main(String[] args) {
92-
Client client = new Client(true, true);
138+
Client client = new Client(true);
93139
client.getPacketManager().registerPacketType("MESSAGE_PACKET", MessagePacket.class);
94140
client.onClientConnect(iClient -> {
95141
System.out.println("Client connected with ID: " + iClient.getID());
@@ -117,6 +163,48 @@ public class Testclient {
117163

118164
This example demonstrates how to create a client that connects to the previously created server.
119165

166+
## Creating a Test Client with Encryption
167+
168+
```java
169+
import com.nexoscript.nexonet.api.crypto.CryptoType;
170+
import com.nexoscript.nexonet.api.crypto.KeySize;
171+
import com.nexoscript.nexonet.client.Client;
172+
import com.nexoscript.nexonet.packet.crypto.CryptoManager;
173+
import com.nexoscript.packets.BytePacket;
174+
import com.nexoscript.packets.MessagePacket;
175+
176+
public class MyClient {
177+
178+
public static void main(String[] args) {
179+
180+
Client client = new Client(true);
181+
CryptoManager cryptoManager = new CryptoManager(client.getLogger());
182+
cryptoManager.initCrypto("secret.key", CryptoType.AES, KeySize.KEY_256);
183+
client.getPacketManager().registerPacketType("MESSAGE_PACKET", MessagePacket.class);
184+
client.getPacketManager().registerPacketType("BYTES_PACKET", BytePacket.class);
185+
client.onClientConnect(iClient -> {
186+
System.out.println("Client connected with ID: " + iClient.getID());
187+
MessagePacket messagePacket = new MessagePacket(cryptoManager.encryptString(command[1]));
188+
client.send(messagePacket);
189+
System.out.println("[System] -> Send Message to Server!");
190+
});
191+
client.onClientDisconnect(iClient -> {
192+
System.out.println("Client disconnected with ID: " + iClient.getID());
193+
});
194+
client.onClientReceived((iClient, packet) -> {
195+
System.out.println("Client with ID: " + iClient.getID() + " received!");
196+
if(packet instanceof MessagePacket messagePacket) {
197+
System.out.println(cryptoManager.decryptString(messagePacket.getMessage()));
198+
}
199+
});
200+
client.onClientSend((iClient, packet) -> {});
201+
client.connect("127.0.0.1", 1234);
202+
}
203+
}
204+
```
205+
206+
This example demonstrates how to create a client with "encryption" that connects to the previously created server.
207+
120208
## Packet Class
121209

122210
```java

nexo-net-api/src/main/java/com/nexoscript/nexonet/api/crypto/ICryptoManager.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
public interface ICryptoManager {
44
void initCrypto(String path, CryptoType type, KeySize size);
5+
56
String encryptString(String data);
67
String decryptString(String data);
78
}

nexo-net-packet/src/main/java/com/nexoscript/nexonet/packet/crypto/CryptoManager.java

Lines changed: 2 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,6 @@ public void initCrypto(String path, CryptoType type, KeySize size) {
5858
public String encryptString(String data) {
5959
try {
6060
this.logger.log(LoggingType.INFO, "Try to encode String");
61-
this.logger.log(LoggingType.INFO, "Crypto: " + data);
6261
this.cipher.init(Cipher.ENCRYPT_MODE, secretKey);
6362
return Base64.getEncoder().encodeToString(this.cipher.doFinal(data.getBytes()));
6463
} catch (InvalidKeyException | IllegalBlockSizeException | BadPaddingException e) {
@@ -71,18 +70,10 @@ public String decryptString(String data) {
7170
try {
7271
this.logger.log(LoggingType.INFO, "Try to decode String");
7372
this.cipher.init(Cipher.DECRYPT_MODE, this.secretKey);
74-
String s = new String(cipher.doFinal(Base64.getDecoder().decode(data)));
75-
try {
76-
byte[] decoded = cipher.doFinal(Base64.getDecoder().decode(data));
77-
this.logger.log(LoggingType.INFO, "Decoded length: " + decoded.length);
78-
} catch (IllegalArgumentException e) {
79-
this.logger.log(LoggingType.ERROR, "Invalid Base64 input: " + data);
80-
throw new RuntimeException("Invalid Base64 encoding", e);
81-
}
82-
this.logger.log(LoggingType.INFO, "Crypto: " + s);
83-
return s;
73+
return new String(cipher.doFinal(Base64.getDecoder().decode(data.getBytes())));
8474
} catch (InvalidKeyException | BadPaddingException | IllegalBlockSizeException e) {
8575
throw new RuntimeException(e);
8676
}
8777
}
78+
8879
}

nexo-net-server/src/main/java/com/nexoscript/nexonet/server/ClientHandler.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,6 @@ public void run() {
6464
String clientMessage;
6565
if(this.clientSocket.isConnected()) {
6666
while ((clientMessage = reader.readLine()) != null) {
67-
System.out.println(clientMessage);
6867
Packet packet = this.packetManager.fromJson(clientMessage);
6968
if (packet instanceof DisconnectPacket disconnectPacket) {
7069
this.server.getLogger().log(LoggingType.INFO, "Client disconnected. Code: " + disconnectPacket.getCode());

nexo-net-server/src/main/java/com/nexoscript/nexonet/server/Server.java

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,5 @@
11
package com.nexoscript.nexonet.server;
22

3-
import com.nexoscript.nexonet.api.crypto.CryptoType;
4-
import com.nexoscript.nexonet.api.crypto.KeySize;
53
import com.nexoscript.nexonet.api.events.server.ServerClientConnectEvent;
64
import com.nexoscript.nexonet.api.events.server.ServerClientDisconnectEvent;
75
import com.nexoscript.nexonet.api.events.server.ServerReceivedEvent;
@@ -17,11 +15,9 @@
1715
import com.nexoscript.nexonet.packet.impl.AuthResponsePacket;
1816
import com.nexoscript.nexonet.packet.impl.DisconnectPacket;
1917

20-
import java.awt.image.ImageProducer;
2118
import java.io.*;
2219
import java.net.*;
2320

24-
import java.security.Key;
2521
import java.util.ArrayList;
2622
import java.util.List;
2723

Lines changed: 29 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,27 +1,54 @@
11
package com.nexoscript;
22

3+
import com.nexoscript.nexonet.api.crypto.CryptoType;
4+
import com.nexoscript.nexonet.api.crypto.KeySize;
35
import com.nexoscript.nexonet.client.Client;
6+
import com.nexoscript.nexonet.packet.crypto.CryptoManager;
7+
import com.nexoscript.packets.BytePacket;
48
import com.nexoscript.packets.MessagePacket;
59

10+
import java.util.Scanner;
11+
612
public class MyClient {
713

814
public static void main(String[] args) {
15+
Scanner scanner = new Scanner(System.in);
16+
917
Client client = new Client(true);
18+
CryptoManager cryptoManager = new CryptoManager(client.getLogger());
19+
cryptoManager.initCrypto("secret.key", CryptoType.AES, KeySize.KEY_256);
20+
Thread console = new Thread(() -> {
21+
while (scanner.hasNextLine()) {
22+
String line = scanner.nextLine();
23+
String[] command = line.split(":");
24+
switch (command[0]) {
25+
case "send" -> {
26+
MessagePacket messagePacket = new MessagePacket(cryptoManager.encryptString(command[1]));
27+
System.out.println(messagePacket.getMessage());
28+
client.send(messagePacket);
29+
System.out.println("[System] -> Send Message to Server!");
30+
}
31+
default -> System.out.println("[System] -> Unknown Command!");
32+
}
33+
}
34+
});
1035
client.getPacketManager().registerPacketType("MESSAGE_PACKET", MessagePacket.class);
36+
client.getPacketManager().registerPacketType("BYTES_PACKET", BytePacket.class);
1137
client.onClientConnect(iClient -> {
1238
System.out.println("Client connected with ID: " + iClient.getID());
13-
client.send(new MessagePacket("ping"));
1439
});
1540
client.onClientDisconnect(iClient -> {
1641
System.out.println("Client disconnected with ID: " + iClient.getID());
1742
});
1843
client.onClientReceived((iClient, packet) -> {
1944
System.out.println("Client with ID: " + iClient.getID() + " received!");
2045
if(packet instanceof MessagePacket messagePacket) {
21-
System.out.println(messagePacket);
46+
System.out.println(messagePacket.getMessage());
47+
System.out.println(cryptoManager.decryptString(messagePacket.getMessage()));
2248
}
2349
});
2450
client.onClientSend((iClient, packet) -> {});
51+
console.start();
2552
client.connect("127.0.0.1", 1234);
2653
}
2754
}
Lines changed: 31 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,41 @@
11
package com.nexoscript;
22

3+
import com.nexoscript.nexonet.api.crypto.CryptoType;
4+
import com.nexoscript.nexonet.api.crypto.KeySize;
5+
import com.nexoscript.nexonet.packet.crypto.CryptoManager;
36
import com.nexoscript.nexonet.server.Server;
7+
import com.nexoscript.packets.BytePacket;
48
import com.nexoscript.packets.MessagePacket;
59

10+
import java.util.Scanner;
11+
612
public class MyServer {
713

814
public static void main(String[] args) {
15+
Scanner scanner = new Scanner(System.in);
16+
917
Server server = new Server(true);
18+
CryptoManager cryptoManager = new CryptoManager(server.getLogger());
19+
cryptoManager.initCrypto("secret.key", CryptoType.AES, KeySize.KEY_256);
20+
Thread console = new Thread(() -> {
21+
while (scanner.hasNextLine()) {
22+
String line = scanner.nextLine();
23+
String[] command = line.split(":");
24+
switch (command[0]) {
25+
case "send" -> server.getClients().forEach(client -> {
26+
if(command[1].equals(client.getId())) {
27+
MessagePacket messagePacket = new MessagePacket(cryptoManager.encryptString(command[2]));
28+
System.out.println(messagePacket.getMessage());
29+
server.sendToClient(client.getId(), messagePacket);
30+
System.out.println("[System] -> Send Message to Client!");
31+
}
32+
});
33+
default -> System.out.println("[System] -> Unknown Command!");
34+
}
35+
}
36+
});
1037
server.getPacketManager().registerPacketType("MESSAGE_PACKET", MessagePacket.class);
38+
server.getPacketManager().registerPacketType("BYTES_PACKET", BytePacket.class);
1139
server.onClientConnect(client -> {
1240
System.out.println("Client connected with ID: " + client.getId());
1341
});
@@ -17,13 +45,12 @@ public static void main(String[] args) {
1745
server.onServerReceived((client, packet) -> {
1846
System.out.println("Server received from client with ID: " + client.getId());
1947
if(packet instanceof MessagePacket messagePacket) {
20-
System.out.println(messagePacket);
21-
if(messagePacket.getMessage().equalsIgnoreCase("ping")) {
22-
server.sendToClient(client.getId(), new MessagePacket("pong"));
23-
}
48+
System.out.println(messagePacket.getMessage());
49+
System.out.println(cryptoManager.decryptString(messagePacket.getMessage()));
2450
}
2551
});
2652
server.onServerSend((client, packet) -> {});
53+
console.start();
2754
server.start(1234);
2855
}
2956
}
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
package com.nexoscript.packets;
2+
3+
import com.nexoscript.nexonet.api.packet.Packet;
4+
5+
import java.util.Arrays;
6+
7+
public class BytePacket extends Packet {
8+
private byte[] bytes;
9+
10+
public BytePacket() {super("BYTES_PACKET");}
11+
12+
public BytePacket(byte[] bytes) {
13+
super("BYTES_PACKET");
14+
this.bytes = bytes;
15+
}
16+
17+
public byte[] getBytes() {
18+
return bytes;
19+
}
20+
21+
public void setBytes(byte[] bytes) {
22+
this.bytes = bytes;
23+
}
24+
25+
@Override
26+
public String toString() {
27+
return "BytePacket{" +
28+
"bytes=" + Arrays.toString(bytes) +
29+
'}';
30+
}
31+
}

0 commit comments

Comments
 (0)