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

avec Java Discussion :

OU exclusif en Java


Sujet :

avec Java

  1. #1
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Janvier 2012
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2012
    Messages : 21
    Points : 16
    Points
    16
    Par défaut OU exclusif en Java
    bonjour à tous,

    je voudrai faire un xor (ou exclusif) entre une chaîne de caractères et un tableau d'entiers générés aléatoirement sachant que le tableau a exactement le même nombre d'éléments que le nombre de caractères de la chaîne et que les nombres entiers sont compris entre 0 et 255.

    je ne sais pas du tout comment y procéder! quelqu'un aurait une petite idée?

    je vous remercie.

  2. #2
    Modérateur

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

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 551
    Points : 21 607
    Points
    21 607
    Par défaut
    - Pour commencer, il faut exprimer les deux sous forme de tableau de byte (un byte étant un entier pouvant prendre 256 valeurs différentes.)
    -- Pour tes entiers de 0 à 255 ça devrait être facile.
    -- Pour la chaîne de caractère, on va supposer qu'elle est en latin-1 : chaine.getBytes("latin-1").

    - Pour faire un xor entre deux bytes, c'est b1 ^ b2.
    - Le xor de deux séquences de bytes, est une séquence de bytes de même longueur, où chaque byte est le xor des bytes des deux autres séquences dans le même ordre.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Janvier 2012
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2012
    Messages : 21
    Points : 16
    Points
    16
    Par défaut
    merci pour votre réponse,

    pour la chaine de caractère j'ai essayé ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     byte [] tab3 = texte.getBytes();
    et pour par exemple la chaine "hello" il me retourne le code ASCII des lettres.

    104
    101
    108
    108
    111

    pour ce qui est du tableau d'entiers je ne sais pas comment le convertir j'ai essayé ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    for ( j=0; j <L; j++)
    {
       tabbyte[j]= (byte)tabentier[j];
    mais ça me renvoi une erreur, je pense que c'est du au fait que int est sur 4 octets tandis que le byte est sur 1 octet!

  4. #4
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    Citation Envoyé par dihinass Voir le message
    pour la chaine de caractère j'ai essayé ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     byte [] tab3 = texte.getBytes();
    prend getBytes(String), pour éviter les surprise en changeant de machine
    Citation Envoyé par dihinass Voir le message
    mais ça me renvoi une erreur!
    Laquelle? Merci.

  5. #5
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Janvier 2012
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2012
    Messages : 21
    Points : 16
    Points
    16
    Par défaut
    l'erreur que ça me renvoie:

    Exception in thread "main" java.lang.NullPointerException

  6. #6
    Modérateur

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

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 551
    Points : 21 607
    Points
    21 607
    Par défaut
    Erreur qui, comme son nom l'indique, n'a rien à voir avec des entiers qui seraient sur 4 ou 1 octet, et tout à voir avec un objet qui serait null.

    L'un de tes tableaux n'a probablement pas été créé, on crée un tableau avec new.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  7. #7
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Janvier 2012
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2012
    Messages : 21
    Points : 16
    Points
    16
    Par défaut
    merci thelvin, vous avez raison ça marche maintenant.
    j'ai fait le xor et j'ai obtenu ce résultat:

    120
    -48
    -53
    54
    -105
    je cherche maintenant à convertir ce résultat en caractères pour obtenir ma chaîne chiffrée, j'ai essayé avec ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
      textechiffre[j]= Integer.toHexString(tabxor[j]);
    mais ça me renvoie ce résultat:
    78
    ffffffd0
    ffffffcb
    36
    ffffff97

  8. #8
    Modérateur

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

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 551
    Points : 21 607
    Points
    21 607
    Par défaut
    Petit couac dû au fait que les bytes sont des entiers signés, et que leurs 256 valeurs différentes ne vont pas de 0 à 255, mais de -128 à 127.

    Utilise plutôt Integer.toHexString(tabxor[j] & 0xFF); qui réaligne le paramètre sous forme de int de 0 à 255.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  9. #9
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Janvier 2012
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2012
    Messages : 21
    Points : 16
    Points
    16
    Par défaut
    merci encore une fois thelvin, j'ai obtenu la représentation hexadécimale, maintenant j'essaie de les convertir en caractères, j'ai trouvé sur internet la méthode append mais je ne sais pas m'en servir pour les tableaux.
    je sais que je demande trop, mais vous ne connaîtriez pas une méthode qui convertirait de l'hexa en caractères?
    merci .

  10. #10
    Modérateur

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

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 551
    Points : 21 607
    Points
    21 607
    Par défaut
    Je comprends pas. L'hexadécimal c'est déjà des caractères puisque c'est une String. Et l'une des meilleurs manières d'écrire un xor.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  11. #11
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Janvier 2012
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2012
    Messages : 21
    Points : 16
    Points
    16
    Par défaut
    j'ai obtenu ceci
    78
    d0
    cb
    36
    97

    qui est une représentation héxa des caractères (cf: table ASCII)
    moi je voudrai obtenir des caractères .
    par exemple au lieu d'avoir 78 j'aurai x

    j'ai trouvé ceci sur le net:
    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 convertHexToString(String hex){
     
    	  StringBuilder sb = new StringBuilder();
    	  StringBuilder temp = new StringBuilder();
     
    	  //49204c6f7665204a617661 split into two characters 49, 20, 4c...
    	  for( int i=0; i<hex.length()-1; i+=2 ){
     
    	      //grab the hex in pairs
    	      String output = hex.substring(i, (i + 2));
    	      //convert hex to decimal
    	      int decimal = Integer.parseInt(output, 16);
    	      //convert the decimal to character
    	      sb.append((char)decimal);
     
    	      temp.append(decimal);
    	  }
    	  System.out.println("Decimal : " + temp.toString());
     
    	  return sb.toString();
      }

  12. #12
    Modérateur

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

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 551
    Points : 21 607
    Points
    21 607
    Par défaut
    C'est impossible, ce sont des octets arbitraires, ils ne sont pas tenus d'avoir un équivalent sous forme ASCII, et notamment peuvent dépasser la valeur 127 et tu en as plein qui le font.

    Le code que tu nous montres là produira du charabia, qui ne respecte ni ASCII, ni aucun encodage connu.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  13. #13
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    Tu ne peux pas et c'est idiot. Vu que tu as appliqué un xor à tes bytes, les nouveaux bytes peuvent correspondre à n'importe quoi, y compris des codes non représentables.

    Tu peux toujours faire un new String(byte[],String), mais franchement, la String que tu va obtenir sera probablement inutilisable. T'as un problème de design plus que d'algorithme là. tu ne peux pas prendre un String, la convertir en byte[] suivant un encodage, appliquer un calcul sur ces bytes et croire après que les nouveaux byte[] correpondront à des charactère dans l'encodage en question.

  14. #14
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Janvier 2012
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2012
    Messages : 21
    Points : 16
    Points
    16
    Par défaut
    merci beaucoup tchize et thelvin pour votre aide.
    en fait oui j'obtiens du charabia mais je pense que c'est ce qui a été demandé, vu que quand on utilise openssl pour crypter on obtient aussi un fichier avec du charabia.

    voilà ce que j'ai fait:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    for(int i=0;i<L;i++) 
    { 
         int decimal = Integer.parseInt(tabxor[i], 16);
         textechiffr[i]=(char)decimal ;
         System.out.print(textechiffr[i]);
    }
    et j'obtiens un truc du genre : xÐË6—=ÅúØŠ„²r¸B)=V

  15. #15
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    Citation Envoyé par dihinass Voir le message
    je pense que c'est ce qui a été demandé, vu que quand on utilise openssl pour crypter on obtient aussi un fichier avec du charabia.
    Avec du SSL on obtiens pas un "fichier" et on ne traite certainement pas le flux SSL comme du texte!!!!

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

Discussions similaires

  1. le Java est la continuité du C++ ???
    Par Vincent PETIT dans le forum Débats sur le développement - Le Best Of
    Réponses: 33
    Dernier message: 25/08/2005, 20h17
  2. Envoi de Datagrames par IP en JAVA
    Par the java lover dans le forum Développement
    Réponses: 2
    Dernier message: 14/08/2002, 11h44
  3. directx et java?? possible??
    Par jiraiya dans le forum DirectX
    Réponses: 3
    Dernier message: 09/07/2002, 19h55
  4. webcam : lire sur un port usb en c/c++ ou java. sous win. ?
    Par flo007 dans le forum Choisir un environnement de développement
    Réponses: 2
    Dernier message: 24/05/2002, 23h24
  5. Service de nommage java C++
    Par Anonymous dans le forum CORBA
    Réponses: 3
    Dernier message: 15/04/2002, 12h48

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