Bonjour,
Je souhaite crypter un message de façon asymétrique en java.
J'utilise le provider Cryptix et l'edi NetBeans 5.0
Donc pour cela:
CLIENT
-Le client génère une clé secrete
-Crypte le message avec la clé secrete
-Crypte la clé secrete avec la clé publique du serveur
-Ils envoit a la la fois la clé secrete crypter et le message au serveur.
SERVEUR
-Le serveur génère une clé public et une clé privée
-Récupère la clé crypté du client et le texte crypté
-Décrypte la clé crypté avec sa clé privé
-Décrypte le message avec la clé qu'il vient de décrypter
Dans l'exemple de mon prof (pour le cryptage symétrique), ils envoit les données sous formes de tableau de bytes. Donc pour le cryptage asymétrique:
Coté client, on a:
De l'autre coté (serveur), je fais un:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 //Cryptage du message avec la cle byte[] msgCrypter = crypterAvecCleSession("Hello world!"); //Cryptage de la cle avec la cle publique byte[] cleCrypter = crypterCleAvecClePubliqueDuServeur(); //Envoit du message et de la clé dos.write(msgCrypter); dos.flush(); dos.close();
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 byte b; ByteArrayOutputStream baos = new ByteArrayOutputStream(); byte[] texteCrypté; try { while(true) { System.out.println("et hop!"); b=dis.readByte(); baos.write(b); } } catch(EOFException e) { texteCrypté = baos.toByteArray(); }
Ca marche mais:
1) Existe il une autre méthode que de forcer l'exception EOFException en fermant le dataoutputstream du client après avoir envoyer le tableau de bytes du message...parce qu'il faut ensuite envoyer le deuxième tableau de bytes (la clé crypté!)
2) Une fois que je récupère la clé crypté sous forme de byte. Je l'a fait décrypter dans le serveur avec sa clé privée:
Mais j'obtient un tableau de bytes en final...hors j'aimerais un objet SecretKey. Hors impossible de convertir un tableau de byte en clé secrete
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 Cipher chiffrement = Cipher.getInstance("RSA","Cryptix"); chiffrement.initDecrypt(clePrive); byte[] CleCrypterB = chiffrement.doFinal(cleCrypter);
Help me!
Partager