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 :

algorithme DES java


Sujet :

Sécurité Java

  1. #1
    Membre confirmé
    Inscrit en
    Juillet 2008
    Messages
    119
    Détails du profil
    Informations forums :
    Inscription : Juillet 2008
    Messages : 119
    Par défaut algorithme DES java
    salut tout le monde
    svp j'ai besoin de votre aide :
    jai trouve sur ce site un code source qui implémente le DES le voila :
    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 class PrivateExample {
     
       public static void main(String[] args) throws Exception {
          //
          // check args and get plaintext
          if (args.length != 1) {
             System.err.println("Usage: java PrivateExample text");
             System.exit(1);
          }
     
    //    byte[] plainText = args[0].getBytes("UTF8");
          String ss = "Hello world, haris is here!";
          byte[] plainText = ss.getBytes();
          //
          // get a DES private key
          System.out.println("\nStart generating DES key");
          KeyGenerator keyGen = KeyGenerator.getInstance("DES");
          keyGen.init(56);
          Key key = keyGen.generateKey();
          System.out.println("Finish generating DES key");
          //
          // get a DES cipher object and print the provider
          Cipher cipher = Cipher.getInstance("DES/ECB/PKCS5Padding");
          System.out.println("\n" + cipher.getProvider().getInfo());
          //
          // encrypt using the key and the plaintext
          System.out.println("\nStart encryption");
          cipher.init(Cipher.ENCRYPT_MODE, key);
          byte[] cipherText = cipher.doFinal(plainText);
          System.out.println("Finish encryption: ");
          System.out.println(new String(cipherText, "UTF8"));
     
          //
          // decrypt the ciphertext using the same key
          System.out.println("\nStart decryption");
          cipher.init(Cipher.DECRYPT_MODE, key);
          byte[] newPlainText = cipher.doFinal(cipherText);
          System.out.println("Finish decryption: ");
     
          System.out.println(new String(newPlainText, "UTF8"));
       }
    }
    le problème que je trouve des problèmes lors modification
    je souhait modifier la dernière partie qui s'occupe de décryptage pour qui 'elle décrypte a partir de la chaine de caractère crypte et non pas a partir de l'objet cipherText initialise dans la partie de cryptage
    voila ce que j'ai fait :
    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
    public class PrivateExample {
       public static void main(String[] args) throws Exception {
    		      String chaineACrypte = "Hello world, haris is here!";
    
    		      // get a DES private key
    
    		      KeyGenerator keyGen = KeyGenerator.getInstance("DES");
    		      keyGen.init(56);
    		      Key key = keyGen.generateKey();
    
    
    		      Cipher cipher = Cipher.getInstance("DES/ECB/PKCS5Padding");
    
    
    		      cipher.init(Cipher.ENCRYPT_MODE, key); 
    		      byte[] cipherText = cipher.doFinal(chaineACrypte.getBytes());
    		     String chaineCrypte =new String(cipherText, "UTF8");  
    		     
    		      //comment je peux utiliser la chaineCrypte et la key pour touver la chaine initiale ?		     
    		      cipher.init(Cipher.DECRYPT_MODE, key);
    		      byte[] newPlainText = cipher.doFinal(chaineCrypte.getBytes());
    		      //erreur : Input length must be multiple of 8 when decrypting with padded cipher
    		      System.out.println(new String(newPlainText, "UTF8"));
    
    
    		     
    		   }
    
    }
    merci de votre aide

  2. #2
    Membre éprouvé
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    121
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 121
    Par défaut
    new String(cipherText, "UTF8") transforme si possible ta table de Bytes comme si elle résultait d'une codification en UTF8 en une chaine de caractères lisible (codifiés en UTF16 en interne).

    Cette correspondance n'est pas toujours possible et tu perd des caractères.
    Dans ton cas, ta table de bytes résulte d'un cryptage et non pas d'un texte edité/éditable en UTF8. Il est donc peu probable que ton cryptage donne quelque chose de cohérent par rapport à une représentation lisible.

    L'opération est IRREVERSIBLE essaie ceci pour t'en convaincre:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    System.out.println(new String(cipherText, "US-ASCII").getBytes().length);
          System.out.println(new String(cipherText, "UTF-8").getBytes().length);
          System.out.println(new String(cipherText, "UTF-16").getBytes().length);
          System.out.println(new String(cipherText, "ISO-8859-1").getBytes().length);

  3. #3
    Membre confirmé
    Inscrit en
    Juillet 2008
    Messages
    119
    Détails du profil
    Informations forums :
    Inscription : Juillet 2008
    Messages : 119
    Par défaut
    merci de votre reponse
    bon je veux essayer d'implémenter le DES moi même
    le seule problème que j'ai c'est que :
    lorsque je transforme ma chaine en binaire et j'applique les différentes étapes de l'algorithme j'obtient un resultat qui est sous la forme d'un tableau d'entier qui contient des entiers de 0 a 128. 00000000-----11111111
    alors a la fin de cryptage je dois presenter le resultat sous forme d'une string (tableau de char)
    le problème est que le char de 0 et de 1 et de 2 et de 3 et de 4...sont code par le même symbole c'est la ou le problème si je veux inverser le char vers l'entier pour appliquer le decodage !!!
    une première solution consiste a laisser le résultat sans le transformer .
    une autre solution consiste a transformer le résultat en hexadécimale .
    Si vous avez des idée n'hésitez pas de les poster
    et si quelqu'un est intéresse par l'implémentation du DES on peut s'aider
    en tout cas merci de votre soutien

  4. #4
    Membre confirmé
    Inscrit en
    Juillet 2008
    Messages
    119
    Détails du profil
    Informations forums :
    Inscription : Juillet 2008
    Messages : 119
    Par défaut
    ok c'est bon

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

Discussions similaires

  1. [Decompiler] Recuperer des .java
    Par pilz dans le forum EDI et Outils pour Java
    Réponses: 3
    Dernier message: 18/11/2009, 13h48
  2. algorithme DES en java
    Par sanskrit76 dans le forum Débuter avec Java
    Réponses: 2
    Dernier message: 14/05/2009, 17h27
  3. Equivalent des Java Hashmap en c++
    Par Sallie dans le forum C++
    Réponses: 4
    Dernier message: 11/05/2006, 17h58
  4. IE et restriction des Java Script
    Par /dev/null dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 15/04/2006, 14h30
  5. cours d'algorithmes en java :?:
    Par imane1 dans le forum Algorithmes et structures de données
    Réponses: 1
    Dernier message: 18/09/2005, 09h18

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