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
Je n'ai pas eu de problèmes avec la taille de la clé 256 vu que j'ai installé le JCE unlimited.
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; }
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é
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 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; }
Il y a une exception qui est 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); }
je suis pas expert dans le domaine de la sécurité.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*..)
Merci
Partager