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

Java Discussion :

Problème de décryptage


Sujet :

Java

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2014
    Messages
    102
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Octobre 2014
    Messages : 102
    Points : 36
    Points
    36
    Par défaut Problème de décryptage
    Bonjour,

    J'utilise des méthodes de cryptage et de décryptage qui me serve à crypter un message. Le seul problème est que je stocke le message crypté dans une base de données, mais lorsque je veux décrypter ce message cela ne fonctionne pas, je vous montre mes codes:

    -méthode de cryptage et de décryptage
    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
     
    	public static byte[] encrypter(final String message, SecretKey cle)
    	throws NoSuchAlgorithmException, NoSuchPaddingException, InvalidKeyException, IllegalBlockSizeException, BadPaddingException {
    		Cipher cipher = Cipher.getInstance("DESede");// getInstance() = Renvoyer une instance de l'objet pour un algorithme particulier dont l'implémentation est celle fournie par le fournisseur précisé
    		cipher.init(Cipher.ENCRYPT_MODE, cle); //Initialiser la classe pour le mode de fonctionnement précisé (Cipher.ENCRYPT_MODE et Cipher.DECRYPT_MODE)
    		byte[] donnees = message.getBytes(); // getBytes() = encode un jeu de caractères en une séquence d'octets
     
    		return cipher.doFinal(donnees); //Ajouter la dernière partie des données à traiter et générer le résultat
    	}
     
    	public static String decrypter(final byte[] donnees, SecretKey cle)	
    	throws NoSuchAlgorithmException, NoSuchPaddingException, InvalidKeyException, IllegalBlockSizeException, BadPaddingException {
    		Cipher cipher = Cipher.getInstance("DESede");
    		cipher.init(Cipher.DECRYPT_MODE, cle);
     
    		return new String(cipher.doFinal(donnees));
    	}
     
    	public static SecretKey cleCrypt()
    	{
    		KeyGenerator keyGen;
    		try {
    			keyGen = KeyGenerator.getInstance("DESede");
    			keyGen.init(112);
    			SecretKey cle = keyGen.generateKey();
     
    			return cle;
     
    		} catch (Exception e) {
    			e.printStackTrace();
    			return null;
    		}
    	}
    -la méthode qui affiche le message
    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
     
    	public void affichageDossier(String nom, String prenom) throws InvalidKeyException, NoSuchAlgorithmException, NoSuchPaddingException, IllegalBlockSizeException, BadPaddingException
    	{
    		int id = recupIdSportif(nom, prenom);
    		try {
     
    		    //Création d'un objet Statement
    		    Statement state = (Statement) Connexion().createStatement();
    		    //L'objet ResultSet contient le résultat de la requête SQL
    		    ResultSet result = state.executeQuery(	"SELECT nom, prenom, numero_v, date_v, info_visite "+
    		    										"FROM visite, sportif "+
    		    										"WHERE sportif.id = visite.id AND numero_v ="+ id +" ");
    		    //On récupère les MetaData
    		    ResultSetMetaData resultMeta = (ResultSetMetaData) result.getMetaData();
     
    		    for(int i = 1; i <= resultMeta.getColumnCount(); i++)
    		    {
    		    	System.out.println(resultMeta.getColumnName(i).toUpperCase());
    		    }		    
     
    		    while(result.next())
    		    {         
    		    	for(int i = 1; i <= resultMeta.getColumnCount()-1; i++)
    		    	{
    		    		System.out.println(result.getObject(i).toString());		    		
    		    	}
     
    		    	String textConsultEnc = result.getObject(resultMeta.getColumnCount()).toString();
    		    	System.out.println(textConsultEnc);// affiche [B@17a2457
    		    	byte[] textEnc = textConsultEnc.getBytes();
    		    	System.out.println(textEnc);// affiche [B@11d72ca
    		    	System.out.println(decrypter(textEnc, cleCrypt()));
    		    }
     
    		    result.close();
    		    state.close();
     
    			} catch(SQLException se)
    			{
    			      //Handle errors for JDBC
    			      se.printStackTrace();
    			}
    	}

    Merci pour votre aide.

  2. #2
    Membre chevronné
    Avatar de eulbobo
    Homme Profil pro
    Développeur Java
    Inscrit en
    Novembre 2003
    Messages
    786
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Novembre 2003
    Messages : 786
    Points : 1 993
    Points
    1 993
    Par défaut
    Ligne 28 : String textConsultEnc = result.getObject(resultMeta.getColumnCount()).toString();

    En gros, tu récupères un Object qui correspond à la dernière colonne, et tu lui dis "affiches le toString correspondant"
    Ca t'affiche [B@17a2457, donc globalement le hashcode de ton Objet, donc j'ai envie de dire : ce qui tu récupères n'est pas un String !

    Modifie un peu ton code et dis moi ce qu'il te dit en faisant ça en ligne 27:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    System.out.println("Classe : " + result.getObject(resultMeta.getColumnCount()).getClass().getName());

    Tu peux aussi me dire ce que tu dis en affichant ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    System.out.println("Classe SQL : " + resultMeta.getColumnClassName(resultMeta.getColumnCount()));
    Je ne suis pas mort, j'ai du travail !

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2014
    Messages
    102
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Octobre 2014
    Messages : 102
    Points : 36
    Points
    36
    Par défaut
    Merci, donc j'ai essayé ce que vous m'avez proposé et il m'affiche: [B

  4. #4
    Modérateur
    Avatar de wax78
    Homme Profil pro
    Chef programmeur
    Inscrit en
    Août 2006
    Messages
    4 074
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chef programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2006
    Messages : 4 074
    Points : 7 978
    Points
    7 978
    Par défaut
    Je crois que la discution fait suite a ce post : http://www.developpez.net/forums/d15...actere-change/

    Moi hier j'ai demandé a vérifier le contenu de la table de la DB pour voir si il n'y avait pas d'erreur a l'insertion... pas de réponses.
    (Les "ça ne marche pas", même écrits sans faute(s), vous porteront discrédit ad vitam æternam et malheur pendant 7 ans)

    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  5. #5
    Membre chevronné
    Avatar de eulbobo
    Homme Profil pro
    Développeur Java
    Inscrit en
    Novembre 2003
    Messages
    786
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Novembre 2003
    Messages : 786
    Points : 1 993
    Points
    1 993
    Par défaut
    J'avais vu aussi wax78

    A titre personnel, ça m'étonne que les deux lignes que j'ai donné affichent "[B"...
    Je ne suis pas mort, j'ai du travail !

  6. #6
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2014
    Messages
    102
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Octobre 2014
    Messages : 102
    Points : 36
    Points
    36
    Par défaut
    Ces lignes devraient afficher quelque chose de particulier?
    Parce que j'ai copié exactement le bout de code que vous m'avez donné.

  7. #7
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2014
    Messages
    102
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Octobre 2014
    Messages : 102
    Points : 36
    Points
    36
    Par défaut
    Voici ma base de données:

    Pièce jointe 177039

  8. #8
    Modérateur
    Avatar de wax78
    Homme Profil pro
    Chef programmeur
    Inscrit en
    Août 2006
    Messages
    4 074
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chef programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2006
    Messages : 4 074
    Points : 7 978
    Points
    7 978
    Par défaut
    Merci mais on avait pas besoin de toute ta BD.

    Je vais donc supposer car quand je vois ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    (1, 1, '2015-04-27', '[B@141d797\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0'),(1, 1, '2015-04-27',
    Je me dit qu'en fait... c'est comme j'avais dit, les données dans la DB ne sont pas bonnes. Tu peux faire tout ce que tu veux, tant que les données inserée dans la DB ne seront pas valabe tu pourras croire que ton code qui va rechercher les infos ne fonctionne pas alors qu'en fait il n'est probablement pas le fautif.
    (Les "ça ne marche pas", même écrits sans faute(s), vous porteront discrédit ad vitam æternam et malheur pendant 7 ans)

    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  9. #9
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2014
    Messages
    102
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Octobre 2014
    Messages : 102
    Points : 36
    Points
    36
    Par défaut
    En faite dans ma base, il sera toujours inséré des choses de la sorte: [B@141d797
    Dans quelle type de champ je pourrais stocker cela?

  10. #10
    Modérateur
    Avatar de wax78
    Homme Profil pro
    Chef programmeur
    Inscrit en
    Août 2006
    Messages
    4 074
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chef programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2006
    Messages : 4 074
    Points : 7 978
    Points
    7 978
    Par défaut
    Ce que tu dis n'a aucun sens.

    Si tu veux stocker un String que tu encrypte (ou pas) pour pouvoir le récupérer après, pour le decrypter et dieu sait quoi faire avec, il faut stocker les données et non l'addresse/hash/appele ça comme tu veux.

    Donc pour en revenir a la quesiton initiales qui est biaisée :

    Le seul problème est que je stocke le message crypté dans une base de données, mais lorsque je veux décrypter ce message cela ne fonctionne pas, je vous montre mes codes
    Tu ne stockes pas comme il faut les message crypté ou pas dans ta DB, point a ligne. Corrige ton code qui insères dans la DB et ensuite on verra. Sinon je pense que ton type de champs peut convenir.
    (Les "ça ne marche pas", même écrits sans faute(s), vous porteront discrédit ad vitam æternam et malheur pendant 7 ans)

    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  11. #11
    Membre chevronné
    Avatar de eulbobo
    Homme Profil pro
    Développeur Java
    Inscrit en
    Novembre 2003
    Messages
    786
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Novembre 2003
    Messages : 786
    Points : 1 993
    Points
    1 993
    Par défaut
    Citation Envoyé par a.collery Voir le message
    Ces lignes devraient afficher quelque chose de particulier?
    Parce que j'ai copié exactement le bout de code que vous m'avez donné.
    Ca aurait du afficher un truc du genre "java.lang.String" ou "java.lang.Object". Bref, le type de l'objet remonté.
    Je ne suis pas mort, j'ai du travail !

  12. #12
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2014
    Messages
    102
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Octobre 2014
    Messages : 102
    Points : 36
    Points
    36
    Par défaut
    Citation Envoyé par eulbobo Voir le message
    Ca aurait du afficher un truc du genre "java.lang.String" ou "java.lang.Object". Bref, le type de l'objet remonté.
    Cela avait juste affiché ce que je vous ai dis

  13. #13
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2014
    Messages
    102
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Octobre 2014
    Messages : 102
    Points : 36
    Points
    36
    Par défaut
    Ce sont les méthodes de cette classe qui crypte et décrypte un message, et je ne comprends pas pourquoi il retourne a chaque fois une adresse quand je crypte, pouvez vous m'aider svp:

    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
    64
    65
    66
     
    package m2lmedical;
     
    import java.security.InvalidKeyException;
    import java.security.NoSuchAlgorithmException;
     
    import javax.crypto.BadPaddingException;
    import javax.crypto.Cipher;
    import javax.crypto.IllegalBlockSizeException;
    import javax.crypto.KeyGenerator;
    import javax.crypto.NoSuchPaddingException;
    import javax.crypto.SecretKey;
     
    public class medical {
     
    	public static byte[] encrypter(final String message, SecretKey cle)
    	throws NoSuchAlgorithmException, NoSuchPaddingException, InvalidKeyException, IllegalBlockSizeException, BadPaddingException {
    		Cipher cipher = Cipher.getInstance("DESede");// getInstance() = Renvoyer une instance de l'objet pour un algorithme particulier dont l'implémentation est celle fournie par le fournisseur précisé
    		cipher.init(Cipher.ENCRYPT_MODE, cle); //Initialiser la classe pour le mode de fonctionnement précisé (Cipher.ENCRYPT_MODE et Cipher.DECRYPT_MODE)
    		byte[] donnees = message.getBytes(); // getBytes() = encode un jeu de caractères en une séquence d'octets
     
    		return cipher.doFinal(donnees); //Ajouter la dernière partie des données à traiter et générer le résultat
    	}
     
    	public static String decrypter(final byte[] donnees, SecretKey cle)	
    	throws NoSuchAlgorithmException, NoSuchPaddingException, InvalidKeyException, IllegalBlockSizeException, BadPaddingException {
    		Cipher cipher = Cipher.getInstance("DESede");
    		cipher.init(Cipher.DECRYPT_MODE, cle);
     
    		return new String(cipher.doFinal(donnees));
    	}
     
    	public static SecretKey cleCrypt()
    	{
    		KeyGenerator keyGen;
    		try {
    			keyGen = KeyGenerator.getInstance("DESede");
    			keyGen.init(112);
    			SecretKey cle = keyGen.generateKey();
     
    			return cle;
     
    		} catch (Exception e) {
    			e.printStackTrace();
    			return null;
    		}
    	}
     
    	public static void main(String[] args) {
    		final String message = "Mon message à traiter d'urgence ";
     
    		try {
    			SecretKey cle = cleCrypt(); 
    			System.out.println("cle:" + cle.getEncoded());
     
    			byte[] enc = encrypter(message, cle);
    			System.out.println("texte encrypte : " + enc.toString());
     
    			String dec = decrypter(enc, cle);
    			System.out.println("texte decrypte : " + dec);
     
    		} catch (Exception e) {
    			e.printStackTrace();
    		}
    	}
    }

  14. #14
    Membre chevronné
    Avatar de eulbobo
    Homme Profil pro
    Développeur Java
    Inscrit en
    Novembre 2003
    Messages
    786
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Novembre 2003
    Messages : 786
    Points : 1 993
    Points
    1 993
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    byte[] enc = encrypter(message, cle);
    			System.out.println("texte encrypte : " + enc.toString());
    La méthode toString sur un tableau d'objet renverra toujours la représentation de son HashCode. Si tu veux voir sa représentation sous forme de chaine de caractères, tu dois faire:


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    byte[] enc = encrypter(message, cle);
    			System.out.println("texte encrypte : " + new String(enc));
    Mais tu as un risque de "perdre" des informations à cause de caractères que tu ne pourrais pas afficher correctement, c'est pour ça que l'encryptage te renvoie un tableau de bytes plutôt qu'une chaîne de caractères.
    (il y a d'autres raisons liées à la sécurité, mais je n'en parle pas ici)
    Je ne suis pas mort, j'ai du travail !

  15. #15
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2014
    Messages
    102
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Octobre 2014
    Messages : 102
    Points : 36
    Points
    36
    Par défaut
    Cela me renvoie: Œ¾•ßh}õé9È¿ âuÆÑîI›HÈÌitÆ×+‹ÔΧ™Á$²

    Est ce que ces caractères pourrait être stockés dans la base de données? merci

  16. #16
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2014
    Messages
    102
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Octobre 2014
    Messages : 102
    Points : 36
    Points
    36
    Par défaut
    J'ai avancé dans mon code, mon cryptage et décryptage marche lorsque j'essaie pour la classe médicale avec une phrase que je rentre moi-même, voici le 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
    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
    64
    65
    66
    67
    68
    69
     
    package m2lmedical;
     
    import java.security.InvalidKeyException;
    import java.security.NoSuchAlgorithmException;
     
    import javax.crypto.BadPaddingException;
    import javax.crypto.Cipher;
    import javax.crypto.IllegalBlockSizeException;
    import javax.crypto.KeyGenerator;
    import javax.crypto.NoSuchPaddingException;
    import javax.crypto.SecretKey;
     
    public class medical {
     
    	public static byte[] encrypter(final String message, SecretKey cle)
    	throws NoSuchAlgorithmException, NoSuchPaddingException, InvalidKeyException, IllegalBlockSizeException, BadPaddingException {
    		Cipher cipher = Cipher.getInstance("DESede");// getInstance() = Renvoyer une instance de l'objet pour un algorithme particulier dont l'implémentation est celle fournie par le fournisseur précisé
    		cipher.init(Cipher.ENCRYPT_MODE, cle); //Initialiser la classe pour le mode de fonctionnement précisé (Cipher.ENCRYPT_MODE et Cipher.DECRYPT_MODE)
    		byte[] donnees = message.getBytes(); // getBytes() = encode un jeu de caractères en une séquence d'octets
     
    		return cipher.doFinal(donnees); //Ajouter la dernière partie des données à traiter et générer le résultat
    	}
     
    	public static String decrypter(final byte[] donnees, SecretKey cle)	
    	throws NoSuchAlgorithmException, NoSuchPaddingException, InvalidKeyException, IllegalBlockSizeException, BadPaddingException {
    		Cipher cipher = Cipher.getInstance("DESede");
    		cipher.init(Cipher.DECRYPT_MODE, cle);
     
    		return new String(cipher.doFinal(donnees));
    	}
     
    	public static SecretKey cleCrypt()
    	{
    		KeyGenerator keyGen;
    		try {
    			keyGen = KeyGenerator.getInstance("DESede");
    			keyGen.init(112);
    			SecretKey cle = keyGen.generateKey();
     
    			return cle;
     
    		} catch (Exception e) {
    			e.printStackTrace();
    			return null;
    		}
    	}
     
    	public static void main(String[] args) {
    		final String message = "Mon message à traiter d'urgence ";
    		try {
     
    			SecretKey cle = cleCrypt(); 
    			System.out.println("cle: " + BytesToHex.bytesToHex(cle.getEncoded()));
     
    			String enc = BytesToHex.bytesToHex(encrypter(message, cle));
    			System.out.println("texte encrypte : " + enc);
     
    			byte[] encB = BytesToHex.hexStringToByteArray(enc);
    			System.out.println("Conversion: "+ encB);
     
    			String dec = decrypter(encB, cle);
    			System.out.println("texte decrypte : " + dec);
     
    		} catch (Exception e) {
    			e.printStackTrace();
    		}
    	}
    }
    Mais lorsque je récupère de ma base de données et que je veux décrypter cela ne marche pas pourtant j'arrive à récupérer mon cryptage et cela bloque au moment du décryptage.
    Le message d'erreur affiché est:

    javax.crypto.BadPaddingException: Given final block not properly padded
    at com.sun.crypto.provider.CipherCore.doFinal(CipherCore.java:966)
    at com.sun.crypto.provider.CipherCore.doFinal(CipherCore.java:824)
    at com.sun.crypto.provider.DESedeCipher.engineDoFinal(DESedeCipher.java:294)
    at javax.crypto.Cipher.doFinal(Cipher.java:2121)
    at m2lmedical.medical.decrypter(medical.java:29)
    at m2lmedical.Connect.affichageDossier(Connect.java:247)
    at m2lmedical.Connect.main(Connect.java:264)


    Voici le code de l'utilisation avec la base de donné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
    51
    52
    53
    54
    55
    56
    57
     
    	public void affichageDossier(String nom, String prenom) throws InvalidKeyException, NoSuchAlgorithmException, NoSuchPaddingException, IllegalBlockSizeException, BadPaddingException
    	{
    		int id = recupIdSportif(nom, prenom);
    		try {
     
    		    //Création d'un objet Statement
    		    Statement state = (Statement) Connexion().createStatement();
    		    //L'objet ResultSet contient le résultat de la requête SQL
    		    ResultSet result = state.executeQuery(	"SELECT nom, prenom, numero_v, date_v, info_visite "+
    		    										"FROM visite, sportif "+
    		    										"WHERE sportif.id = visite.id AND visite.id ="+ id +" ");
    		    //On récupère les MetaData
    		    ResultSetMetaData resultMeta = (ResultSetMetaData) result.getMetaData();
     
    		    for(int i = 1; i <= resultMeta.getColumnCount(); i++)
    		    {
    		    	System.out.println(resultMeta.getColumnName(i).toUpperCase());
    		    }		    
     
    		    while(result.next())
    		    {         
    		    	for(int i = 1; i <= resultMeta.getColumnCount()-1; i++)
    		    	{
    		    		System.out.println(result.getObject(i).toString());		    		
    		    	}
     
    		    	String textConsultEnc = result.getObject(resultMeta.getColumnCount()).toString();
    		    	System.out.println("Récupération du stockage en base: "+ textConsultEnc);
     
    		    	byte[] textEnc = BytesToHex.hexStringToByteArray(textConsultEnc);
    		    	System.out.println("Conversion: "+ textEnc);
     
    		    	System.out.println("Texte décryté: " + decrypter(textEnc, cleCrypt()));
    		    }
     
    		    result.close();
    		    state.close();
     
    			} catch(SQLException se)
    			{
    			      //Handle errors for JDBC
    			      se.printStackTrace();
    			}
    	}
    	public static void main(String[] args)
    	{
    		Connect connn = new Connect();
     
    		try {
    			connn.affichageDossier("Collery", "Adrien");
    		} catch (InvalidKeyException | NoSuchAlgorithmException | NoSuchPaddingException | IllegalBlockSizeException
    				| BadPaddingException e) {
    			e.printStackTrace();
    		}
    	}
    }

  17. #17
    Modérateur
    Avatar de wax78
    Homme Profil pro
    Chef programmeur
    Inscrit en
    Août 2006
    Messages
    4 074
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chef programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2006
    Messages : 4 074
    Points : 7 978
    Points
    7 978
    Par défaut
    Tu utilises un algo qui nécessite un padding qui dans ton cas n'est pas mis en place. D'ou l'exception. Il faut soit changer d'algo, soit rajouté des bytes "inutiles" pour obtenir la bonne taille. (oui c'est un peu bizarre mais c'est comme ça)

    Lire ceci te donnera peut être une idée plus claire du problème, cours et tutoriels Java : http://java.developpez.com/cours/
    (Les "ça ne marche pas", même écrits sans faute(s), vous porteront discrédit ad vitam æternam et malheur pendant 7 ans)

    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  18. #18
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2014
    Messages
    102
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Octobre 2014
    Messages : 102
    Points : 36
    Points
    36
    Par défaut
    Merci.
    Voici mes méthodes de conversion si cela vous intéresse:

    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
     
    package m2lmedical;
     
    public abstract class BytesToHex 
    {
     
    	  public static String bytesToHex(byte[] bytes) 
    	  {
    	    StringBuilder builder = new StringBuilder();
    	    for (byte b: bytes) 
    	    {
    	      builder.append(String.format("%02x", b));
    	    }
    	    return builder.toString();
    	  }
     
    	  public static byte[] hexStringToByteArray(String s) 
    	  {
    		    int len = s.length();
    		    byte[] data = new byte[len / 2];
    		    for (int i = 0; i < len; i += 2) 
    		    {
    		        data[i / 2] = (byte) ((Character.digit(s.charAt(i), 16) << 4)
    		                             + Character.digit(s.charAt(i+1), 16));
    		    }
    		    return data;
    		}
    }

  19. #19
    Membre chevronné
    Avatar de eulbobo
    Homme Profil pro
    Développeur Java
    Inscrit en
    Novembre 2003
    Messages
    786
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Novembre 2003
    Messages : 786
    Points : 1 993
    Points
    1 993
    Par défaut
    Moi j'ai une question toute con...

    Quand tu encryptes un String, tu obtiens un tableau de bytes[] (qu'on appelle crypt[]).
    Pour décrypter tes données, tu passes ton tableau de bytes(crypt[]) qui correspondent aux données cryptées pour récupérer un tableau de bytes[] qui correspond au résultat de la méthode String.getBytes() (dont tu peux récupérer la valeur lisible en faisant un new String[(bytes[])

    Pourquoi entre les deux tu fais de la "conversion" en passant par une chaîne de caractères qui crée une "valeur hexadécimale" de ton tableau de bytes ?
    Je ne suis pas mort, j'ai du travail !

  20. #20
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2014
    Messages
    102
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Octobre 2014
    Messages : 102
    Points : 36
    Points
    36
    Par défaut
    Pour que ce soit plus l'adresse qui soit stockée dans ma base.

Discussions similaires

  1. Réponses: 0
    Dernier message: 28/02/2011, 20h58
  2. Problème cryptage décryptage BlowFish
    Par xokami35x dans le forum Sécurité
    Réponses: 3
    Dernier message: 31/03/2010, 13h15
  3. Problème de décryptage avec Rijndael
    Par kaderscream dans le forum C#
    Réponses: 4
    Dernier message: 02/06/2008, 19h56
  4. RSA-probléme de décryptage
    Par mahis_ dans le forum C#
    Réponses: 3
    Dernier message: 23/03/2008, 19h35
  5. Probléme de décryptage avec la clé publique
    Par vladvad dans le forum C#
    Réponses: 9
    Dernier message: 25/10/2007, 17h44

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