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

Langage Java Discussion :

Caster une String en byte sans getByte()


Sujet :

Langage Java

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 35
    Points : 16
    Points
    16
    Par défaut Caster une String en byte sans getByte()
    Bonjour à tous,

    J'ai fait un module de cryptage de fichier XML et décryptage.
    Le cryptage fonctionne sans soucis par contre le décryptage me pose quelques problèmes :

    Pendant le cryptage, j'insère mes données cryptées dans le XML, en faisant

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    byte[] str = c.cryptageString(txtCib);
    el.setText(MaChaineCryptée.toString());
    Ca marche très bien.


    Pour décrypter, j'ai besoin de récupèrer la valeur de l'élément choisi (qui est crypté) et d'appeler la méthode de décryptage.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    //je récupère la valeur de l'élement XML choisi
    String nomPays = el.attribute("id").getText();
     
    //faire appel a getBytes me convertie la valeur qui est déjà censé être un array de byte  :-(
    String str = c.decryptageInString(nomPays.getBytes("UTF8"));
    Le problème c'est que je récupère une String or ma méthode de décryptage attend un array de byte en paramètre, je ne peux donc pas directement envoyer le contenu de mon élément.

    N'y a-t-il pas un moyen de faire quelquechose dans le genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    String nomPays = el.attribute("id").getText();
    String str = c.decryptageInString((byte[])nomPays);
    Evidemment j'ai une erreur "String cannot be casted to Byte...."

    Par avance merci à ceux qui me liront

    Bonne après midi

  2. #2
    Invité
    Invité(e)
    Par défaut
    Salut,
    Il faudrait que tu nous donnes le format de ta chaine représentant ton tableau d'octets...
    Si c'est du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    0x01, 0x02, 0x03, ...
    Tu peux utiliser la méthode String.split() selon les virgules et ensuite parser en octet chaque élément du résultat de ton split

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 35
    Points : 16
    Points
    16
    Par défaut
    Salut George7,

    Merci de ta réponse.
    Après le cryptage les données ressemblent à celà : [B@5bf624

    J'ai essayé de faire un toCharArray() et d'ajouter chaque élément dans un tableau de byte mais j'ai le message suivant :

    javax.crypto.IllegalBlockSizeException: Input length must be multiple of 8 when decrypting with padded cipher

    voici mes méthodes 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
     
    public byte[] decryptageInByte(byte[] txt)
    	{
    		try
    		{
    			Cipher cipher=Cipher.getInstance("DESede");
    			cipher.init(Cipher.DECRYPT_MODE,clef);
    			return cipher.doFinal(txt);
    		}
    		catch (Exception e)
    		{
    			System.out.println(e);
    			return null;
    		}
     
    	}
     
     
     
    	public String decryptageInString(byte[] txt)
    	{
    		return new String(decryptageInByte(txt));
    	}

  4. #4
    Invité
    Invité(e)
    Par défaut
    Ok
    donc tu fais déjà cette erreur.
    La méthode toString() sur un tableau renvoit l'adresse du tableau en mémoire... Donc là tu perds toutes tes infos.
    Il vaut mieux que tu construises ta chaine toi même avec une boucle, ou que tu utilises Arrays.toString() (voir http://java.sun.com/javase/6/docs/ap...ng(byte[])) sinon tu perds tout. Tu peux ensuite utiliser là méthode que je t'ai donnée pour reconstruire ton tableau
    Dernière modification par Invité ; 07/10/2008 à 18h30. Motif: modif lien

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 35
    Points : 16
    Points
    16
    Par défaut
    Ah d'accord, je comprend.

    Je m'y penche et je reviendrai dès que j'aurai trouvé.

    Merci beaucoup

    @+

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 35
    Points : 16
    Points
    16
    Par défaut
    J'ai mis du temps à répondre, j'avais d'autres choses à faire.

    J'ai bien fait un Arrays.toString(), ce que me donne maintenant une chaine de type : [18, -63, 51, 66, -14, -39, 106, -114]

    Mais au moment du décryptage, impossible de parser en byte!
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Exception in thread "main" java.lang.NumberFormatException: For input string: " -63"
    Voici mon code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    String nomPays =  (String) el.attribute("id").getData();
     
                    nomPays = nomPays.replace("[", "");
                    nomPays = nomPays.replace("]", "");
                    String[] str =nomPays.split(",") ; 
     
                    byte[] tabOctet = new byte[8];
                    for (int i = 0 ; i < str.length;i++){
                        tabOctet[i] =  Byte.parseByte(str[i]);
                    }
    Apparament il arrive à convertir en byte la première valeur de mon tableau de string, mais à la deuxième il plante...

  7. #7
    Invité
    Invité(e)
    Par défaut
    Salut
    Il y a un espace avant ta valeur... fais un trim pour supprimer les esapces au début et ca devrait marcher
    Ou alors simplement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    nomPays.replace(" ", "");

  8. #8
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 35
    Points : 16
    Points
    16
    Par défaut
    Quelle erreur de débutant...

    ça marche très bien, merci pour tes conseils avisés George7.

    Pour ceux que ça interesse le petit bout de code pour parser une string en byte :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
     
    //ma chaine est de la forme [ xx , xx , xx , xx , ... ]
    //j'enlève ces éléments superflus
    nomPays = nomPays.replace("[", "");
    nomPays = nomPays.replace("]", "");
    nomPays = nomPays.replace(" ", "");
    String[] str =nomPays.split(",") ; 
     
    byte[] tabOctet = new byte[str.length];
    for (int i = 0 ; i < str.length;i++){
        tabOctet[i] =  Byte.parseByte(str[i]);
    }
    Merci encore!

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

Discussions similaires

  1. Caster String en byte sans qu'aucun caractère ne change
    Par a.collery dans le forum Langage
    Réponses: 20
    Dernier message: 06/05/2015, 10h53
  2. Réponses: 2
    Dernier message: 01/11/2007, 10h23
  3. convertir une String en byte
    Par oc_alex86 dans le forum Langage
    Réponses: 6
    Dernier message: 07/06/2007, 11h20
  4. Convertir une string en byte
    Par ToTo13 dans le forum Langage
    Réponses: 1
    Dernier message: 26/01/2007, 19h48
  5. caster une string en char*
    Par luta dans le forum C++
    Réponses: 5
    Dernier message: 20/01/2006, 02h36

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