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 Blowfish


Sujet :

Java

  1. #1
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Mai 2011
    Messages
    57
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2011
    Messages : 57
    Points : 24
    Points
    24
    Par défaut Problème de décryptage Blowfish
    Bonjour,
    Je dois développer deux fonctions permettant de crypter et de décrypter avec en paramètre un string et une clef.
    Pour cet excercice j'ai choisi d'utiliser le cryptage Blowfish, j'ai bien réussi a crypter mais lors du décryptage une erreure survient et je ne la comprend pas:
    "Input length must be multiple of 8 when decrypting with padded cipher"

    Mes fonctions :
    Fonction pour 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
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    public String encrypt() throws InvalidKeyException, IllegalBlockSizeException, BadPaddingException {
     
    		// création secret key + mdp
    		String password = "bouboul";
    		String key = "toto";
    		// génère tableau de byte
    		byte[] keydata = key.getBytes();
    		// encryption de la clef
    		SecretKeySpec KS = new SecretKeySpec(keydata, "Blowfish");
    		// creation cipher
     
    		try {
    			Cipher cipher = Cipher.getInstance("Blowfish");
    			// initialisation du cryptage cipher
    			// Passe en @param mode et clef
    			cipher.init(Cipher.ENCRYPT_MODE, KS);
    			this.mdp = new String(cipher.doFinal(password.getBytes()));
    			System.out.println(this.mdp);
     
    		}
    		catch (NoSuchAlgorithmException e) {
    			System.err.println(e);
    		}
    		catch (NoSuchPaddingException e) {
    			System.err.println(e);
    		}
    		return this.mdp;
     
    	}
    Fonction pour 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
    17
    18
    19
    20
    21
    22
    public String decrypt(String password) throws IllegalBlockSizeException, BadPaddingException, InvalidKeyException {
     
    		String key = "toto";
    		byte[] keydata = key.getBytes();
    		SecretKeySpec KS = new SecretKeySpec(keydata, "Blowfish");
     
    		try {
    			Cipher cipher = Cipher.getInstance("Blowfish");
    			cipher.init(Cipher.DECRYPT_MODE, KS);
    			password = new String(cipher.doFinal(this.mdp.getBytes()));
    			System.out.println(password);
     
    		}
    		catch (NoSuchAlgorithmException e) {
    			System.err.println(e);
    		}
    		catch (NoSuchPaddingException e) {
    			System.err.println(e);
    		}
    		return password;
     
    	}


    Vous remarquerez que je n'ai aps mis en paramètre le string et la clef car je les ai mis en dur pour les Tests merci d'avance !!!

  2. #2
    Modérateur
    Avatar de wax78
    Homme Profil pro
    Chef programmeur
    Inscrit en
    Août 2006
    Messages
    4 076
    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 076
    Points : 7 983
    Points
    7 983
    Par défaut
    Certains fonctions de cryptage/décryptage nécessite des blocs de données de taille multiple. (padding).
    Dans ton cas, il faut une taille multiple de 8 comme l'erreur indique. Donc en gros il faudra rajouter des données bidon afin de pouvoir faire marcher l'algorithme.
    (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

  3. #3
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Mai 2011
    Messages
    57
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2011
    Messages : 57
    Points : 24
    Points
    24
    Par défaut
    Merci de ta réponse quand vous parlez de données bidons vous parler de mon String password ? il faudrait qu'il ai une taille particulière c'est ça ? et a quoi équivaut 8 enfin concrètement c'est la longueur de la chaine ? :s désolé je suis totalement débutant en java

  4. #4
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 554
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 554
    Points : 21 615
    Points
    21 615
    Par défaut
    Oui enfin, en principe l'algo de chiffrage s'occupe de produire ce padding, ce qui fait qu'on peut refiler le résultat à l'algo de déchiffrage sans rien y changer, et ça devrait marcher.
    À mon avis le problème vient du fait que tu mets le chiffrage dans une String. Un chiffrage est composé d'octets, pas de texte. Tu ne peux pas le mettre dans une String et espérer que ça marche, les résultats seront forcément saugrenus.

    En l'occurrence, ta plate-forme utilise sûrement utf-8 comme charset par défaut, ce qui fait que lorsque le chiffrage contient un octet non-ascii, le décodeur utf-8 considère que c'est un caractère multi-octet, et comme il ne respecte pas les règles, il le remplace par une marque d'erreur. Cette marque d'erreur, une fois re-décodée en octets, fait plus d'un octet, ce qui fait que tu ne passes pas, à déchiffrer, le même nombres d'octets que tu as obtenu quand tu as chiffré.

    Bref : pas mettre des octets binaires dans une String. Ça marche pas.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

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