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 :

Probleme decryptage AES


Sujet :

Sécurité Java

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    354
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 354
    Points : 388
    Points
    388
    Par défaut Probleme decryptage AES
    Voilà j'ai un probleme de decryptage en AES. j'ai l'exception : "javax.crypto.IllegalBlockSizeException: Input length (with padding) not multiple of 16 bytes"

    mon code :

    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
    public static SecretKey generateKeyAES128() throws NoSuchAlgorithmException {
    	        KeyGenerator keyGen = KeyGenerator.getInstance("AES");
    	        SecureRandom random = new SecureRandom(new String("la clef secret").getBytes());
    	        keyGen.init(random);
                SecretKey key = keyGen.generateKey();
    	        //keyGen.init(128);
    	       // return keyGen.generateKey();
                return key;
    	}
     
    	public void initAES() throws SamiException {
    		try {
    			//Install SunJCE provider 
    			Provider sunJce = new SunJCE(); 
    			Security.addProvider(sunJce);
     
     
    			// Create the key
    			/*KeyGenerator kgen = KeyGenerator.getInstance("AES");
    			kgen.init(128);
    			SecretKey key = kgen.generateKey();*/
     
    			SecretKey key= generateKeyAES128();
     
    			ecipher = Cipher.getInstance("AES");
    			dcipher = Cipher.getInstance("AES");
     
    			// Create the ciphers
    			ecipher.init(Cipher.ENCRYPT_MODE, key);
    			dcipher.init(Cipher.DECRYPT_MODE, key);
     
    		} catch (Exception e) {
    			throw new SamiException("Echec d'instanciation de l'encryptage", EXC_FWK_SYSTEM, e);
    		}
    	}
    et

    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
    public String encrypt(String str) throws SamiException {
    		try {
    			// Encode the string into bytes using utf-8
    			byte[] utf8 = str.getBytes();
     
    			// Encrypt
    			byte[] enc = ecipher.doFinal(utf8);
     
    			// Encode bytes to base64 to get a string
    			return new sun.misc.BASE64Encoder().encode(enc);
    		} catch (Exception e) {
    			throw new SamiException("Echec de l'encryptage", EXC_FWK_SYSTEM, e);
    		}
    	}
     
    	public String decrypt(String str) throws SamiException {
    		try {
    			// Decode base64 to get bytes
    			byte[] dec = new sun.misc.BASE64Decoder().decodeBuffer(str);
     
     
    			// Decrypt
    			byte[] utf8 = dcipher.doFinal(dec);
     
    			// Decode using utf-8
    			return new String(utf8, "UTF8");
    		} catch (Exception e) {
    			throw new SamiException("Echec du décryptage", EXC_FWK_SYSTEM, e);
    		}
    	}
    Quelqu'un peut-il m'aider ?

  2. #2
    Membre habitué Avatar de Piolet
    Inscrit en
    Février 2004
    Messages
    469
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 469
    Points : 160
    Points
    160
    Par défaut
    il faut que la chaine que tu veux décrypter soit de taille % 16, c'est à dire de taille soit égale a 16 caractères, soit 32, soit 48 etc...

    sinon le décryptage n'est pas possible...

    doFinal ne marche pas avec un simple String ? si non, appelle le directement avec str.getBytes() ou (byte[]) str.getChar() je sais plus
    Hum hum hum...géant vert ! ! !
    Le meilleur moyen de trouver c encore de chercher ! ! !

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    354
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 354
    Points : 388
    Points
    388
    Par défaut
    C'est ce que je fais, j'ai mis do final (str.getBytes()); mais cela ne marche pas!!!

    Je ne comprends pas pourquoi...

  4. #4
    Membre habitué Avatar de Piolet
    Inscrit en
    Février 2004
    Messages
    469
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 469
    Points : 160
    Points
    160
    Par défaut
    Citation Envoyé par lilli1407 Voir le message
    C'est ce que je fais, j'ai mis do final (str.getBytes()); mais cela ne marche pas!!!

    Je ne comprends pas pourquoi...
    et avec la chaine simplement, ca ne passe ?
    Hum hum hum...géant vert ! ! !
    Le meilleur moyen de trouver c encore de chercher ! ! !

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    354
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 354
    Points : 388
    Points
    388
    Par défaut
    Non, doFinal n'accepte pas un string!

  6. #6
    Invité
    Invité(e)
    Par défaut
    Salut,
    C'est quoi la taille de ton tableau de byte ? Apparemment tu aurais déjà dû appliquer un padding pour en faire un multiple de 16 mais tu ne l'as pas fait...

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    354
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 354
    Points : 388
    Points
    388
    Par défaut
    C'est bien là le probleme : ma chaine est de 24 bits et je n'arive pas à appliquer le padding correctement :-)

Discussions similaires

  1. Decryptage AES CFB128 : recherche DLL
    Par ihih45 dans le forum Sécurité
    Réponses: 0
    Dernier message: 13/10/2014, 21h39
  2. Decryptage AES 256 avec Mot de passe
    Par Lekno dans le forum Sécurité
    Réponses: 1
    Dernier message: 29/05/2013, 11h17
  3. Probleme decryptage avec certificat
    Par peaceandloveman01 dans le forum Développement
    Réponses: 12
    Dernier message: 07/07/2010, 18h02
  4. Codage AES, et decryptage
    Par cassegrain dans le forum Algorithmes et structures de données
    Réponses: 3
    Dernier message: 17/12/2008, 14h02
  5. [C# 2.0] Problème de décryptage SecureString
    Par Khrysby dans le forum Windows Forms
    Réponses: 6
    Dernier message: 06/11/2006, 18h24

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