Bonjour à tout le monde
En tant qu'un débutant dans le domaine crypto, j'ai un problème en manipulant une clé de session.
En fait, je crypte une msg avec une clé secrete que j'ai créé aléatoirement,
et crypte la clé secrete avec la clé publique (du serveur) que j'ai récupéré dans un certificat. de côté serveur, je décrypte la clé secrete avec la clé privée du serveur. Mais le problème c'est que je n'arrive pas de récupérer la clé secrete correctement.
Voici mon code côté client :
et le code du serveur
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
19
20
21
22
23
24
25 //Cryptage symétrique du msg KeyGenerator cleGener = KeyGenerator.getInstance("DES", codeProvider); cleGener.init(new SecureRandom()); SecretKey cle = cleGener.generateKey(); chiffrementSym.init(Cipher.ENCRYPT_MODE, cle); byte[] msgInit = msg.getBytes(); byte[] msgCrypte = chiffrementSym.doFinal(msgInit); //Crypter la clé secrete avec la clé publique du serveur /*c'est probablement ici qui pose problème, mais je ne sais pas comment faire. On m'avez dit que il faut utiliser les byteArrayInputStream et ObjectInputStream au lieu de caster directement la clé serecte en un tableau de byte, j'ai essayé mais je n'arrive pas*/ chiffrementAsym.init(Cipher.ENCRYPT_MODE, clePubliqueServeur); byte[] cleSecrete = cle.toString().getBytes(); byte[] cleSecreteCrypte = chiffrementAsym.doFinal(cle.getEncoded()); //envoyer sur le reseau dos.writeInt(cleSecreteCrypte.length); dos.flush(); dos.write(cleSecreteCrypte); dos.flush(); dos.writeInt(msgCrypte.length); dos.flush(); dos.write(msgCrypte); dos.flush();
Est-ce qu'il y a qlq'un qui peut m'aider svp?
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
19
20
21
22
23 lon = dis.readInt(); byte[] cleSecreteRecu = new byte[lon]; dis.read(cleSecreteRecu); lon = dis.readInt(); byte[] msgRecu = new byte[lon]; dis.read(msgRecu); //Décrypter la clé secrete recue par la clé privée du serveur chiffrementAsym.init(Cipher.DECRYPT_MODE, clePrivee); byte[] cleS = chiffrementAsym.doFinal(cleSecreteRecu); ByteArrayInputStream bais = new ByteArrayInputStream(cleS); ObjectInputStream ois = new ObjectInputStream(bais); SecretKey cleSecrete = null; try { cleSecrete = (SecretKey) ois.readObject(); } catch (ClassNotFoundException ex) { Logger.getLogger(threadGRH_c.class.getName()).log(Level.SEVERE, null, ex); } //Décrypter le msgRecu avec la clé secrete chiffrementSym.init(Cipher.DECRYPT_MODE, cleSecrete); byte[] msgCli = chiffrementSym.doFinal(msgRecu);
Merci d'avance
Partager