Bonjour,
Je suis entrain de développer une application pour un cours. Je dois générer une clé symétrique puis la chiffrer avec une clé privée d'une personne puis avec la clé publique d'une autre personne.

Pour la génération du clé voici le code
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
public SecretKey genererCle() {
		SecretKey cleSymetrique = null;
		// Get the KeyGenerator
		KeyGenerator kgen = null;
		try {
			kgen = KeyGenerator.getInstance("AES");
		} catch (NoSuchAlgorithmException e) {
			e.printStackTrace();
		}
		kgen.init(256);
		cleSymetrique = kgen.generateKey();
		return cleSymetrique;
	}
Je n'ai pas eu de problèmes avec la taille de la clé 256 vu que j'ai installé le JCE unlimited.

Le problème se pose quand j'essaye de la chiffrer avec une clé privée d'une personne A.
Voici le code de la gestion d'une pair de clé
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
	public KeyPair gestionPair() {
		KeyPairGenerator keyGen = null;
		KeyPair paire;
		try {
			keyGen = KeyPairGenerator.getInstance("RSA");
		} catch (NoSuchAlgorithmException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		keyGen.initialize(2048, new SecureRandom());
		paire = keyGen.generateKeyPair();
		return paire;
	}
Le problème se pose quand j'essaye de chiffrer cette clé symétrique avec la clé privée générée.
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
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
public void chiffrerCleAsymetrique(SecretKey cle, PublicKey pub,
			PrivateKey priv) {
 
		// chiffrer la cle non codee avec sa cle privee pour avoir comme
		// resultat = cle codee 1
		Cipher cipherPrive = null;
		try {
			cipherPrive = Cipher.getInstance(algo);
		} catch (NoSuchAlgorithmException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (NoSuchPaddingException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		try {
			cipherPrive.init(Cipher.ENCRYPT_MODE, priv);
		} catch (InvalidKeyException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		byte[] texteCrypte = null;
 
		try {
			texteCrypte = cipherPrive.doFinal(cle.getEncoded());
		} catch (IllegalBlockSizeException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (BadPaddingException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
 
 
		// chiffrer la cle codee1 avec une cle publique
		Cipher cipherPublic = null;
		try {
			cipherPublic = Cipher.getInstance(algo);
		} catch (NoSuchAlgorithmException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (NoSuchPaddingException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		try {
			cipherPublic.init(Cipher.ENCRYPT_MODE, pub);
		} catch (InvalidKeyException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		byte[] texteCrypte2 = null;
		try {
			texteCrypte2 = cipherPrive.doFinal(texteCrypte);
		} catch (IllegalBlockSizeException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (BadPaddingException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		sauverFichier("cleChiffree.key",texteCrypte2);	
	}
Il y a une exception qui est générée:
java.security.InvalidKeyException: No installed provider supports this key: sun.security.rsa.RSAPrivateCrtKeyImpl
at javax.crypto.Cipher.a(DashoA13*..)
at javax.crypto.Cipher.init(DashoA13*..)
at javax.crypto.Cipher.init(DashoA13*..)
je suis pas expert dans le domaine de la sécurité.
Merci