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 :

Problème Padding sur décryptage AES


Sujet :

Sécurité Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de Mygush
    Inscrit en
    Juin 2007
    Messages
    226
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 226
    Par défaut Problème Padding sur décryptage AES
    Bonjour,
    N'ayant pas trouvé de solution sur le forum, je vous expose mon problème :
    Pour des raisons de sécurité, je dois crypter des données avant de les stocker dans une bdd sql. Ensuite, je dois pouvoir afficher les données recherchées de ma base dans une application en décrypté.
    J'arrive donc à stocker mes données cryptées dans ma base sans problème mais je n'arrive pas à les décrypter par la suite. Voici l'erreur générée:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    javax.crypto.BadPaddingException: Given final block not properly padded
    Voici maintenant le code utilisé pour crypter et décrypter :
    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
    	public static String encrypt (String cookieValue) throws InvalidKeyException, UnsupportedEncodingException {
    	    SecurityAES aes = new SecurityAES();
    	    aes.generateKey();
    	    byte[] ciphertext = aes.crypt(cookieValue);   
    	    BASE64Encoder encoder = new BASE64Encoder();
    	    String encryptedString = encoder.encode(ciphertext);
    	    return encryptedString;
    	}
     
    	public static String decrypt (String cookieValue) throws InvalidKeyException, IOException {
    		SecurityAES aes = new SecurityAES();
    	    aes.generateKey();
    		BASE64Decoder decoder = new BASE64Decoder();
    		byte[] encryptedValue = decoder.decodeBuffer(cookieValue);
    		return aes.decryptInString(encryptedValue);
    	}
    et les fonctions appelées:
    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
    public final static int KEY_SIZE = 128; 
    	private SecretKeySpec secretKeySpec;
     
    	public SecurityAES() {
    	}
     
    	public void generateKey() {
    		try {
    			KeyGenerator keyGen = KeyGenerator.getInstance("AES");
    			keyGen.init(KEY_SIZE);
    			SecretKey secretKey = keyGen.generateKey();  
    			byte[] raw = secretKey.getEncoded();
    			secretKeySpec = new SecretKeySpec(raw, "AES");
    		}
    		catch (Exception e) {
    			System.out.println(e);
    		} 
    	}
     
    	public byte[] crypt(byte[] plaintext) {
    		try {
    			Cipher cipher = Cipher.getInstance("AES");
    			cipher.init(Cipher.ENCRYPT_MODE, secretKeySpec);
    			return cipher.doFinal(plaintext);    
    		}
    		catch (Exception e) {
    			System.out.println(e);
    		} 
    		return null;
    	}
     
    	public byte[] crypt(String plaintext) throws UnsupportedEncodingException{
    	    return crypt(plaintext.getBytes());
    	}
     
    	public byte[] decryptInBytes(byte[] ciphertext) {
    		try {
    			Cipher cipher = Cipher.getInstance("AES");
    			cipher.init(Cipher.DECRYPT_MODE, secretKeySpec);
    			return cipher.doFinal(ciphertext);
    		}
    		catch (Exception e) {
    			System.out.println(e);
    		} 
    		return null;
    	}
     
    	public String decryptInString(byte[] ciphertext) {
    		return new String(decryptInBytes(ciphertext));
    	}
    Merci d'avance pour vos réponses !

  2. #2
    Membre confirmé Avatar de Mygush
    Inscrit en
    Juin 2007
    Messages
    226
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 226
    Par défaut
    Bon alors euh... le gros boulet
    L'erreur était tellement énorme que j'y ai même pas pensé tout de suite...
    En fait, dans le code précédent, je générais un nouvelle clé pour pouvoir décrypter et donc forcément, c'est pas terrible...
    Encore désolé à tous.
    Pour info, voici la fonction que j'ai modifié, ça pourra peut-être servir:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    public void generateKey() {
    		try {
    			KeyGenerator keyGen = KeyGenerator.getInstance("AES");
    			SecureRandom random = new SecureRandom(new String("Ma clé perso").getBytes());
    			keyGen.init(random);
    			SecretKey secretKey = keyGen.generateKey();  
    			byte[] raw = secretKey.getEncoded();
    			secretKeySpec = new SecretKeySpec(raw, "AES");
    		}
    		catch (Exception e) {
    			System.out.println(e);
    		} 
    	}

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Problème droit sur un tablespace
    Par wazar dans le forum Administration
    Réponses: 11
    Dernier message: 05/01/2010, 15h12
  2. problème écriture sur un fichier
    Par drinkmilk dans le forum MFC
    Réponses: 4
    Dernier message: 24/06/2007, 00h08
  3. Problème innerHTML sur div !!!
    Par aburner dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 27/01/2005, 09h23
  4. [CR8] Problème tableau sur plusieurs pages???
    Par christophe28 dans le forum SAP Crystal Reports
    Réponses: 5
    Dernier message: 02/11/2004, 15h46
  5. [MFC] Problème pointeur sur une classe
    Par mick74 dans le forum MFC
    Réponses: 7
    Dernier message: 14/04/2004, 14h17

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