IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Sécurité Java Discussion :

BadPaddingException lors de la désérialisation d'un champ crypté


Sujet :

Sécurité Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 22
    Par défaut BadPaddingException lors de la désérialisation d'un champ crypté
    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:

    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){
    			//...
    		}
    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
     
    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);
    }
    Les champs de "Guilde":
    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;
    Merci d'avance pour votre aide !

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 22
    Par défaut
    Je me permet un petit up.
    Personne n'a la réponse à mon problème?

  3. #3
    Membre éclairé Avatar de Razgriz
    Profil pro
    Professeur / chercheur en informatique / mathématiques
    Inscrit en
    Avril 2006
    Messages
    391
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Professeur / chercheur en informatique / mathématiques

    Informations forums :
    Inscription : Avril 2006
    Messages : 391
    Par défaut
    Je parie que c'est parce la taille tu tableau de bytes que tu donne à doFinal n'est pas correcte. Utilise les méthodes getBlockSize() et getOutputSize() de Cipher pour connaîtrer la taille des bytes d'entrée et de sortie.

    Inspire-toi pour cela du code de cette classe que j'ai postée (dernier post de la page) pour cela. Les exceptions ne sont pas lancées si le Cipher a été correctement initialisé.

Discussions similaires

  1. Problème lors de la désérialisation de plusieurs objets
    Par casho dans le forum Entrée/Sortie
    Réponses: 0
    Dernier message: 28/01/2009, 11h21
  2. Problème lors de la suppression d'un champ d'une liste
    Par guintolli dans le forum SharePoint
    Réponses: 2
    Dernier message: 25/08/2008, 15h05
  3. Erreur lors d'un select sur un champ BLOB
    Par Lucas Panny dans le forum Bases de données
    Réponses: 13
    Dernier message: 18/04/2008, 13h44
  4. Erreur lors de changement de longueur de champs
    Par Bouillon dans le forum Bases de données
    Réponses: 2
    Dernier message: 09/10/2006, 09h17
  5. [10G] Problème lors de création de tables et champs
    Par keiserjo dans le forum Oracle
    Réponses: 7
    Dernier message: 28/09/2006, 12h14

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo