Cryptage RSA

This commit is contained in:
Lucàs
2022-11-29 15:32:01 +01:00
parent 121cf32f9f
commit 71fdc47706
5 changed files with 72 additions and 24 deletions
+14 -8
View File
@@ -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();
-1
View File
@@ -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 {
+44
View File
@@ -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
View File
@@ -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"));