Bonjour à tous
Je demande votre aide car après plusieurs recherches, j'ai trouvé l'origine de mon problème mais sans vraiment en comprendre la cause.
Voici mon problème: J'ai un objet "Guilde" contenant plusieurs champs. Mon objet "Guilde" implémente l'interface "Externalizable".
Un de ces champs (de type Long) est stocké crypté pour plus de sécurité, c'est une sorte de clef d'identification de la guilde. (d'où l'utilisation des méthodes de "Externalizable")
Il se trouve que ma méthode readExternal(..) propage une "BadPaddingException" lors de l'éxécution de la méthode cipher.doFinal(tableauDeByteCrypté); et je n'arrive pas à comprendre pourquoi.(il se trouve que mon niveau d'anglais ne m'aide pas beaucoup lors de mes lectures de la Javadoc
)
Voici le code source:
Et voici le code source de la méthode writeExternal(..) :
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 public void readExternal(ObjectInput in)throws IOException, ClassNotFoundException{ try{ keyGen = KeyGenerator.getInstance("DES"); keyGen.init(56); key = keyGen.generateKey(); cipher = Cipher.getInstance("DES/ECB/PKCS5Padding"); cipher.init(Cipher.DECRYPT_MODE, key); cipherText = (byte []) in.readObject(); try{ byte[] newPlainText = cipher.doFinal(cipherText); } //Utilisé pour localiser la source de l'erreur catch(BadPaddingException e){ System.out.println("BadPaddingException !"); } ID = Long.getLong(newPlainText.toString()); } catch(Exception e){ //... }
Les champs de "Guilde":
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 public void writeExternal(ObjectOutput out)throws IOException{ encrypt = ID.toString().getBytes("UTF8"); try{ keyGen = KeyGenerator.getInstance("DES"); keyGen.init(56); key = keyGen.generateKey(); cipher.init(Cipher.ENCRYPT_MODE, key); cipherText = cipher.doFinal(encrypt); } catch(Exception e){ e.printStackTrace(); } out.writeObject(cipherText); out.writeObject(nom); out.writeInt(idCreateur); }
Merci d'avance pour votre aide !
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 private KeyGenerator keyGen; private java.security.Key key; private Cipher cipher; private byte[] cipherText; private Long ID; private byte[] encrypt; private String nom; private int idCreateur;![]()
Partager