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 :
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();
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
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);
Est-ce qu'il y a qlq'un qui peut m'aider svp?

Merci d'avance