mirror of
https://github.com/LucasVbr/mini-chat.git
synced 2026-05-13 17:21:54 +00:00
Cryptage RSA
This commit is contained in:
Generated
+3
-4
@@ -2,13 +2,12 @@
|
|||||||
<project version="4">
|
<project version="4">
|
||||||
<component name="ChangeListManager">
|
<component name="ChangeListManager">
|
||||||
<list default="true" id="79e91d13-7d5f-4b9a-954b-9bc7cde074fc" name="Changes" comment="">
|
<list default="true" id="79e91d13-7d5f-4b9a-954b-9bc7cde074fc" name="Changes" comment="">
|
||||||
<change afterPath="$PROJECT_DIR$/README.md" afterDir="false" />
|
<change afterPath="$PROJECT_DIR$/src/reseau/RSA.java" afterDir="false" />
|
||||||
<change beforePath="$PROJECT_DIR$/.idea/workspace.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/workspace.xml" afterDir="false" />
|
<change beforePath="$PROJECT_DIR$/.idea/workspace.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/workspace.xml" afterDir="false" />
|
||||||
<change beforePath="$PROJECT_DIR$/src/client/Client.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/client/Client.java" afterDir="false" />
|
<change beforePath="$PROJECT_DIR$/src/client/Client.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/client/Client.java" afterDir="false" />
|
||||||
<change beforePath="$PROJECT_DIR$/src/reseau/AES.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/reseau/AES.java" afterDir="false" />
|
<change beforePath="$PROJECT_DIR$/src/reseau/AES.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/reseau/AES.java" afterDir="false" />
|
||||||
<change beforePath="$PROJECT_DIR$/src/serveur/Serveur.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/serveur/Serveur.java" afterDir="false" />
|
<change beforePath="$PROJECT_DIR$/src/serveur/Serveur.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/serveur/Serveur.java" afterDir="false" />
|
||||||
</list>
|
</list>
|
||||||
<list id="84fd72d2-dba6-4275-83d3-958fab491b17" name="Changes by burgu" comment="" />
|
|
||||||
<option name="SHOW_DIALOG" value="false" />
|
<option name="SHOW_DIALOG" value="false" />
|
||||||
<option name="HIGHLIGHT_CONFLICTS" value="true" />
|
<option name="HIGHLIGHT_CONFLICTS" value="true" />
|
||||||
<option name="HIGHLIGHT_NON_ACTIVE_CHANGELIST" value="false" />
|
<option name="HIGHLIGHT_NON_ACTIVE_CHANGELIST" value="false" />
|
||||||
@@ -121,9 +120,9 @@
|
|||||||
</list>
|
</list>
|
||||||
<recent_temporary>
|
<recent_temporary>
|
||||||
<list>
|
<list>
|
||||||
<item itemvalue="Application.AES" />
|
|
||||||
<item itemvalue="Application.Client" />
|
<item itemvalue="Application.Client" />
|
||||||
<item itemvalue="Application.Serveur" />
|
<item itemvalue="Application.Serveur" />
|
||||||
|
<item itemvalue="Application.AES" />
|
||||||
<item itemvalue="Application.Client2" />
|
<item itemvalue="Application.Client2" />
|
||||||
<item itemvalue="Application.Serveur2" />
|
<item itemvalue="Application.Serveur2" />
|
||||||
</list>
|
</list>
|
||||||
@@ -139,7 +138,7 @@
|
|||||||
<updated>1668515473737</updated>
|
<updated>1668515473737</updated>
|
||||||
<workItem from="1668515476841" duration="6049000" />
|
<workItem from="1668515476841" duration="6049000" />
|
||||||
<workItem from="1669119772164" duration="6834000" />
|
<workItem from="1669119772164" duration="6834000" />
|
||||||
<workItem from="1669724625302" duration="5444000" />
|
<workItem from="1669724625302" duration="6630000" />
|
||||||
</task>
|
</task>
|
||||||
<servers />
|
<servers />
|
||||||
</component>
|
</component>
|
||||||
|
|||||||
+14
-8
@@ -5,10 +5,13 @@ import java.net.Socket;
|
|||||||
import java.nio.charset.StandardCharsets;
|
import java.nio.charset.StandardCharsets;
|
||||||
import java.rmi.UnknownHostException;
|
import java.rmi.UnknownHostException;
|
||||||
import java.security.Key;
|
import java.security.Key;
|
||||||
|
import java.security.KeyPair;
|
||||||
|
import java.security.PublicKey;
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
import java.util.Scanner;
|
import java.util.Scanner;
|
||||||
|
|
||||||
import reseau.AES;
|
import reseau.AES;
|
||||||
|
import reseau.RSA;
|
||||||
|
|
||||||
public class Client {
|
public class Client {
|
||||||
|
|
||||||
@@ -20,8 +23,10 @@ public class Client {
|
|||||||
ObjectInputStream in = null;
|
ObjectInputStream in = null;
|
||||||
|
|
||||||
// Clé de chiffrage
|
// Clé de chiffrage
|
||||||
Key key = AES.genererCle();
|
KeyPair clientKeyPair = RSA.genererCle();
|
||||||
AES.sauvegarderCle(key);
|
PublicKey serverKey = null;
|
||||||
|
|
||||||
|
// AES.sauvegarderCle(key);
|
||||||
|
|
||||||
// Création des Sockets
|
// Création des Sockets
|
||||||
try {
|
try {
|
||||||
@@ -31,10 +36,9 @@ public class Client {
|
|||||||
in = new ObjectInputStream(serverSocket.getInputStream());
|
in = new ObjectInputStream(serverSocket.getInputStream());
|
||||||
|
|
||||||
// On envoie la clé de chiffrage
|
// On envoie la clé de chiffrage
|
||||||
out.writeObject(key);
|
out.writeObject(clientKeyPair.getPublic());
|
||||||
|
|
||||||
System.out.println("Clé envoyé");
|
serverKey = (PublicKey) in.readObject();
|
||||||
System.out.println(Arrays.toString(key.getEncoded()));
|
|
||||||
|
|
||||||
} catch (UnknownHostException e) {
|
} catch (UnknownHostException e) {
|
||||||
System.out.println("Destination unknown");
|
System.out.println("Destination unknown");
|
||||||
@@ -42,6 +46,8 @@ public class Client {
|
|||||||
} catch (IOException e) {
|
} catch (IOException e) {
|
||||||
System.out.println("now to investigate this IO issue");
|
System.out.println("now to investigate this IO issue");
|
||||||
System.exit(-1);
|
System.exit(-1);
|
||||||
|
} catch (ClassNotFoundException e) {
|
||||||
|
throw new RuntimeException(e);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Communication
|
// Communication
|
||||||
@@ -52,13 +58,13 @@ public class Client {
|
|||||||
// Envoi du message
|
// Envoi du message
|
||||||
System.out.print("client > ");
|
System.out.print("client > ");
|
||||||
message = scan.nextLine();
|
message = scan.nextLine();
|
||||||
messageCrypte = AES.encrypter(message, key);
|
messageCrypte = RSA.encrypter(message, serverKey);
|
||||||
out.writeObject(messageCrypte);
|
out.writeObject(messageCrypte);
|
||||||
|
|
||||||
// Reception du message
|
// Reception du message
|
||||||
messageCrypte = (byte[]) in.readObject();
|
messageCrypte = (byte[]) in.readObject();
|
||||||
message = AES.decrypter(messageCrypte, key);
|
message = RSA.decrypter(messageCrypte, clientKeyPair.getPrivate());
|
||||||
System.out.printf("serveur > %s -> %s\n", new String(messageCrypte, StandardCharsets.UTF_8), message);
|
System.out.printf("serveur > %s\n", message);
|
||||||
} while (!message.equals("bye"));
|
} while (!message.equals("bye"));
|
||||||
|
|
||||||
out.close();
|
out.close();
|
||||||
|
|||||||
@@ -4,7 +4,6 @@ import javax.crypto.*;
|
|||||||
import java.io.*;
|
import java.io.*;
|
||||||
import java.nio.charset.StandardCharsets;
|
import java.nio.charset.StandardCharsets;
|
||||||
import java.security.*;
|
import java.security.*;
|
||||||
import java.util.Arrays;
|
|
||||||
|
|
||||||
public class AES {
|
public class AES {
|
||||||
|
|
||||||
|
|||||||
@@ -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;
|
||||||
|
}
|
||||||
|
}
|
||||||
+11
-11
@@ -1,13 +1,13 @@
|
|||||||
package serveur;
|
package serveur;
|
||||||
|
|
||||||
import reseau.AES;
|
import reseau.RSA;
|
||||||
|
|
||||||
import java.io.*;
|
import java.io.*;
|
||||||
import java.net.ServerSocket;
|
import java.net.ServerSocket;
|
||||||
import java.net.Socket;
|
import java.net.Socket;
|
||||||
import java.nio.charset.StandardCharsets;
|
import java.nio.charset.StandardCharsets;
|
||||||
import java.security.Key;
|
import java.security.KeyPair;
|
||||||
import java.util.Arrays;
|
import java.security.PublicKey;
|
||||||
import java.util.Scanner;
|
import java.util.Scanner;
|
||||||
|
|
||||||
public class Serveur {
|
public class Serveur {
|
||||||
@@ -18,7 +18,9 @@ public class Serveur {
|
|||||||
public static void main(String[] args) {
|
public static void main(String[] args) {
|
||||||
ServerSocket serverSocket = null;
|
ServerSocket serverSocket = null;
|
||||||
Socket clientSocket = null;
|
Socket clientSocket = null;
|
||||||
Key clientKey;
|
|
||||||
|
KeyPair serverKeyPairs = RSA.genererCle();
|
||||||
|
PublicKey clientKey;
|
||||||
|
|
||||||
// Connexion
|
// Connexion
|
||||||
try {
|
try {
|
||||||
@@ -40,10 +42,8 @@ public class Serveur {
|
|||||||
out = new ObjectOutputStream(clientSocket.getOutputStream());
|
out = new ObjectOutputStream(clientSocket.getOutputStream());
|
||||||
|
|
||||||
// On récupère la clé du client
|
// On récupère la clé du client
|
||||||
clientKey = (Key) in.readObject();
|
clientKey = (PublicKey) in.readObject();
|
||||||
|
out.writeObject(serverKeyPairs.getPublic());
|
||||||
System.out.println("Clé reçue");
|
|
||||||
System.out.println(Arrays.toString(clientKey.getEncoded()));
|
|
||||||
|
|
||||||
// Communication
|
// Communication
|
||||||
String message;
|
String message;
|
||||||
@@ -51,14 +51,14 @@ public class Serveur {
|
|||||||
do {
|
do {
|
||||||
// Envoi du message
|
// Envoi du message
|
||||||
messageCrypte = (byte[]) in.readObject();
|
messageCrypte = (byte[]) in.readObject();
|
||||||
message = AES.decrypter(messageCrypte, clientKey);
|
message = RSA.decrypter(messageCrypte, serverKeyPairs.getPrivate());
|
||||||
System.out.printf("client > %s -> %s\n", new String(messageCrypte, StandardCharsets.UTF_8), message);
|
System.out.printf("client > %s\n", message);
|
||||||
|
|
||||||
|
|
||||||
// Reception du message
|
// Reception du message
|
||||||
System.out.print("serveur > ");
|
System.out.print("serveur > ");
|
||||||
message = scan.nextLine();
|
message = scan.nextLine();
|
||||||
messageCrypte = AES.encrypter(message, clientKey);
|
messageCrypte = RSA.encrypter(message, clientKey);
|
||||||
out.writeObject(messageCrypte);
|
out.writeObject(messageCrypte);
|
||||||
} while (!message.equals("bye"));
|
} while (!message.equals("bye"));
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user