diff --git a/.idea/workspace.xml b/.idea/workspace.xml index f9b14c2..9e17eec 100644 --- a/.idea/workspace.xml +++ b/.idea/workspace.xml @@ -2,13 +2,12 @@ - + - - + @@ -139,7 +138,7 @@ 1668515473737 - + diff --git a/src/client/Client.java b/src/client/Client.java index fd5e9e2..5378157 100644 --- a/src/client/Client.java +++ b/src/client/Client.java @@ -5,10 +5,13 @@ import java.net.Socket; import java.nio.charset.StandardCharsets; import java.rmi.UnknownHostException; import java.security.Key; +import java.security.KeyPair; +import java.security.PublicKey; import java.util.Arrays; import java.util.Scanner; import reseau.AES; +import reseau.RSA; public class Client { @@ -20,8 +23,10 @@ public class Client { ObjectInputStream in = null; // Clé de chiffrage - Key key = AES.genererCle(); - AES.sauvegarderCle(key); + KeyPair clientKeyPair = RSA.genererCle(); + PublicKey serverKey = null; + +// AES.sauvegarderCle(key); // Création des Sockets try { @@ -31,10 +36,9 @@ public class Client { in = new ObjectInputStream(serverSocket.getInputStream()); // On envoie la clé de chiffrage - out.writeObject(key); + out.writeObject(clientKeyPair.getPublic()); - System.out.println("Clé envoyé"); - System.out.println(Arrays.toString(key.getEncoded())); + serverKey = (PublicKey) in.readObject(); } catch (UnknownHostException e) { System.out.println("Destination unknown"); @@ -42,6 +46,8 @@ public class Client { } catch (IOException e) { System.out.println("now to investigate this IO issue"); System.exit(-1); + } catch (ClassNotFoundException e) { + throw new RuntimeException(e); } // Communication @@ -52,13 +58,13 @@ public class Client { // Envoi du message System.out.print("client > "); message = scan.nextLine(); - messageCrypte = AES.encrypter(message, key); + messageCrypte = RSA.encrypter(message, serverKey); out.writeObject(messageCrypte); // Reception du message messageCrypte = (byte[]) in.readObject(); - message = AES.decrypter(messageCrypte, key); - System.out.printf("serveur > %s -> %s\n", new String(messageCrypte, StandardCharsets.UTF_8), message); + message = RSA.decrypter(messageCrypte, clientKeyPair.getPrivate()); + System.out.printf("serveur > %s\n", message); } while (!message.equals("bye")); out.close(); diff --git a/src/reseau/AES.java b/src/reseau/AES.java index 5ea8694..5b742dd 100644 --- a/src/reseau/AES.java +++ b/src/reseau/AES.java @@ -4,7 +4,6 @@ import javax.crypto.*; import java.io.*; import java.nio.charset.StandardCharsets; import java.security.*; -import java.util.Arrays; public class AES { diff --git a/src/reseau/RSA.java b/src/reseau/RSA.java new file mode 100644 index 0000000..8a2feb2 --- /dev/null +++ b/src/reseau/RSA.java @@ -0,0 +1,44 @@ +package reseau; + +import javax.crypto.Cipher; +import java.nio.charset.StandardCharsets; +import java.security.*; + +public class RSA { + + public static KeyPair genererCle() { + KeyPair keyPair = null; + + try { + KeyPairGenerator keyGenerator = KeyPairGenerator.getInstance("RSA"); + keyGenerator.initialize(2048); + + keyPair = keyGenerator.generateKeyPair(); + } catch (Exception e) { + e.printStackTrace(); + } + return keyPair; + } + + public static byte[] encrypter(String msg, PublicKey key){ + try { + Cipher cipher = Cipher.getInstance("RSA") ; + cipher.init(Cipher.ENCRYPT_MODE, key) ; + return cipher.doFinal(msg.getBytes()); + } catch(Exception e){ + e.printStackTrace(); + } + return null; + } + + public static String decrypter(byte[] msg, PrivateKey key) { + try { + Cipher cipher = Cipher.getInstance("RSA") ; + cipher.init(Cipher.DECRYPT_MODE, key); + return new String(cipher.doFinal(msg), StandardCharsets.UTF_8); + } catch (Exception e) { + e.printStackTrace(); + } + return null; + } +} diff --git a/src/serveur/Serveur.java b/src/serveur/Serveur.java index 015bfcc..289fbed 100644 --- a/src/serveur/Serveur.java +++ b/src/serveur/Serveur.java @@ -1,13 +1,13 @@ package serveur; -import reseau.AES; +import reseau.RSA; import java.io.*; import java.net.ServerSocket; import java.net.Socket; import java.nio.charset.StandardCharsets; -import java.security.Key; -import java.util.Arrays; +import java.security.KeyPair; +import java.security.PublicKey; import java.util.Scanner; public class Serveur { @@ -18,7 +18,9 @@ public class Serveur { public static void main(String[] args) { ServerSocket serverSocket = null; Socket clientSocket = null; - Key clientKey; + + KeyPair serverKeyPairs = RSA.genererCle(); + PublicKey clientKey; // Connexion try { @@ -40,10 +42,8 @@ public class Serveur { out = new ObjectOutputStream(clientSocket.getOutputStream()); // On récupère la clé du client - clientKey = (Key) in.readObject(); - - System.out.println("Clé reçue"); - System.out.println(Arrays.toString(clientKey.getEncoded())); + clientKey = (PublicKey) in.readObject(); + out.writeObject(serverKeyPairs.getPublic()); // Communication String message; @@ -51,14 +51,14 @@ public class Serveur { do { // Envoi du message messageCrypte = (byte[]) in.readObject(); - message = AES.decrypter(messageCrypte, clientKey); - System.out.printf("client > %s -> %s\n", new String(messageCrypte, StandardCharsets.UTF_8), message); + message = RSA.decrypter(messageCrypte, serverKeyPairs.getPrivate()); + System.out.printf("client > %s\n", message); // Reception du message System.out.print("serveur > "); message = scan.nextLine(); - messageCrypte = AES.encrypter(message, clientKey); + messageCrypte = RSA.encrypter(message, clientKey); out.writeObject(messageCrypte); } while (!message.equals("bye"));