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 :

Problème dans un cryptage de cesar


Sujet :

Sécurité Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Juin 2004
    Messages
    100
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 100
    Par défaut Problème dans un cryptage de cesar
    voilà ce code source est cencé
    1/ Demander une chaine de caractére
    2/ Demander un décalage pour le cryptage
    3/ Crypter !!
    4/ Eventuellement decrypter (pour l'instant il faut décommenter)


    Le probleme est que si j'ai le x et que je demande un décalage de 5 je vais bien aller au debut de l'alphabet ... mais j'aurait le meme chiffre pour x,y,z qui sera le décalage ...

    Code source compilé avec netbeans !

    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
     
    //import java.string.*;
    import java.lang.*;
    import javax.swing.*;
     
     
    class Cesar {
      static public String chaine;
      static public StringBuffer copieChaine;
      static public int ecart = 1;
     
      public Cesar(String chaine, int leDecal)
      {
          ecart = leDecal; //Pour le decalage du cryptage
          copieChaine = new StringBuffer(chaine);
          System.out.println ("phase de cryptage");
          cryptage();
          /*System.out.println ("phase de decryptage");
          decryptage();*/
     
      }//constructeur
     
      public void cryptage(){
        for(int i = 0; i < chaine.length(); i++){
          char car = chaine.charAt(i);
          if(car > (char)('z'-ecart))
            copieChaine.replace(i, i+1, ecart == 1 ? "a" : ""
                                                    +(char)('a'+ecart-1));
          else if(chaine.charAt(i) == ' ')
            copieChaine.replace(i, i+1, "$");
          else
            copieChaine.replace(i, i+1, ""+(char)(car+ecart));
        }
        System.out.println("Chaine d'origine : " + chaine);
        System.out.println("Chaine cryptee   : " + copieChaine);
      }//methode de cryptage
     
     
      public void decryptage(){
        for(int i = 0; i < copieChaine.length(); i++){
          char car = copieChaine.charAt(i);
          if(car < (char)('a'+ecart))
            copieChaine.replace(i, i+1, ecart == 1 ? "z" : ""
                                                             +(char)('z'-ecart-1));
          else if(copieChaine.charAt(i) == '$')
            copieChaine.replace(i, i+1, " ");
          else
            copieChaine.replace(i, i+1, ""+(char)(car-ecart));
        }
        System.out.println("Chaine d'origine : " + chaine);
        System.out.println("Chaine decryptee : " + copieChaine);
      }//methode de decryptage
     
     
      public static void main(String args[]) {
        String chardecal;  
        int decal;    
        chaine = JOptionPane.showInputDialog(null, "Quel est le texte ?");
        chardecal = JOptionPane.showInputDialog(null, "Quelle est le decalage ?");
     
        decal = Integer.parseInt(chardecal);
     
        Cesar UnCryptage = new Cesar(chaine,decal);
     
       }
     
     
    }
    Voilà si vous pouviez me dire pour quelle raison le décalage a un probleme ce serait sympa !!

  2. #2
    Expert confirmé

    Profil pro
    Fabricant et casseur d'avions
    Inscrit en
    Avril 2004
    Messages
    3 818
    Détails du profil
    Informations personnelles :
    Localisation : France, Tarn (Midi Pyrénées)

    Informations professionnelles :
    Activité : Fabricant et casseur d'avions
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2004
    Messages : 3 818
    Par défaut Re: probleme dans un cryptage de cesar
    Salut,

    Citation Envoyé par hutchuck
    Code source compilé avec netbeans !
    C'est plus javac qui compile?

    Citation Envoyé par hutchuck
    Voilà si vous pouviez me dire pour quelle raison le décalage a un probleme ce serait sympa !!
    Parce que c'est toi-même qui a dit de faire comme ça!
    Je cite:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
         if(car > (char)('z'-ecart))
            copieChaine.replace(i, i+1, ecart == 1 ? "a" : ""
                                                    +(char)('a'+ecart-1));
    En français, dès qu'avec le décalage on dépasse le Z, on remplace par la caractère qui se trouve à tant après le A... donc quelque soit le caractère à coder, tu sortiras toujours le même caractère!
    Y'a un soucis dans ton algorithme...
    "Errare humanum est, sed perseverare diabolicum"

    Ma page sur DVP.com

  3. #3
    Membre confirmé
    Inscrit en
    Juin 2004
    Messages
    100
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 100
    Par défaut
    et bien dans ce que tu as reprit en quote c pas ce que j ai fait ?

    parce que j essayais bien de mettre en place ce que tu as dit qu il fallait faire et je pensait que ceci marchait .....

  4. #4
    Expert confirmé

    Profil pro
    Fabricant et casseur d'avions
    Inscrit en
    Avril 2004
    Messages
    3 818
    Détails du profil
    Informations personnelles :
    Localisation : France, Tarn (Midi Pyrénées)

    Informations professionnelles :
    Activité : Fabricant et casseur d'avions
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2004
    Messages : 3 818
    Par défaut
    Citation Envoyé par hutchuck
    et bien dans ce que tu as reprit en quote c pas ce que j ai fait ?

    parce que j essayais bien de mettre en place ce que tu as dit qu il fallait faire et je pensait que ceci marchait .....
    Euh.. me serais-je mal exprimé? Je n'ai pas dit ce qu'il fallait faire, j'ai dit ce que ton programme faisait.
    Et vu qu'il ne fait pas ce que tu voudrais qu'il fasse, c'est là qu'il faut modifier...

    Imagine que tu décales de 3 rangs: ecart=3
    Normalement, le z passe en c, le y en b, et le x en a.
    Ton programme va tomber sur la fameuse condition, va voir que le x doit être traité, et donc il remplace par 'a'+ecart-1, soit 'a'+3-1='a'+2='c'... ok
    On passe au y... toujours pareil, il doit être traité, et donc on remplace... je vais faire un copier-coller ça ira plus vite... et donc il remplace par 'a'+ecart-1, soit 'a'+3-1='a'+2='c'... y'a rien qui te choque là?
    "Errare humanum est, sed perseverare diabolicum"

    Ma page sur DVP.com

  5. #5
    Membre confirmé
    Inscrit en
    Juin 2004
    Messages
    100
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 100
    Par défaut
    si
    j ai donc tenter de résoudre le probleme avec ce coup la un algorithme qui je pense doit marcher .... mais un programme avec quelques erreurs que je ne parvint pas a comprendre et à résoudre !

    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
     
    import javax.swing.*;
     
    class Cesar {
        private String leTexteClair;
        private StringBuffer leTexteCrypte;
        private int leDecalage;
     
        Cesar(String leTexte,int leDecal)
        {
            leTexteClair = leTexte.toLowerCase();
            leDecalage = leDecal;        
        }//constructeur
     
        public void cryptage()
        {
            int laTaille;
            String leCar;
            laTaille = leTexteClair.length();//taille de la chaine
     
            for (int i=0;i<laTaille;i++) //on parcours la chaine
            {
                //on additionne au caractére le decalage pour avoir le nouveau caractere
                leCar =(String)(leTexteClair.charAt(i)+leDecalage);
                leTexteCrypte.replace(i,i+1, leCar); //on remplace
     
                if (leTexteCrypte.charAt(i)>'z')                 //si on depasse z
                      leTexteCrypte.replace(i,i+1, (String)(leCar-'z')); //on agit en conséquence                      
            }
            JOptionPane.showMessageDialog(null,leTexteCrypte);
        }//cryptage
     
        public static void main(String []telsargs) {
    	String leTexte, leDecalCaractere;
            int leDecalInt;
     
    	leTexte = JOptionPane.showInputDialog(null, "Quel est ton texte ?");
    	leDecalCaractere = JOptionPane.showInputDialog(null, "Quelle est ta decalage ?");
     
            leDecalInt = Integer.parseInt(leDecalCaractere);//convertit le decalage en int
     
            Cesar unCesar = new Cesar(leTexte,leDecalInt);
            Cryptage();
        }       
     
     
    }//class
    voilà j ai des erreurs quand je veux faire le décalage et que j'additionne le décalage (de type int ) a un String !!

  6. #6
    Expert confirmé

    Profil pro
    Fabricant et casseur d'avions
    Inscrit en
    Avril 2004
    Messages
    3 818
    Détails du profil
    Informations personnelles :
    Localisation : France, Tarn (Midi Pyrénées)

    Informations professionnelles :
    Activité : Fabricant et casseur d'avions
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2004
    Messages : 3 818
    Par défaut
    C'est du vite 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
    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
     
    import javax.swing.*;
     
    class Cesar {
        private String leTexteClair;
        private StringBuffer leTexteCrypte;
        private int leDecalage;
     
        public Cesar(String leTexte,int leDecal)
        {
            leTexteClair = leTexte.toLowerCase();
            leDecalage = leDecal;  
            cryptage();
        }//constructeur
     
        public void cryptage()
        {
            int laTaille;
            String leCar;
            String leCarDecal;
            laTaille = leTexteClair.length();//taille de la chaine
           leTexteCrypte=new StringBuffer(leTexteClair);
     
            for (int i=0;i<laTaille;i++) //on parcours la chaine
            {
                //on additionne au caractére le decalage pour avoir le nouveau caractere
               int temp= leTexteClair.charAt(i);
     
               leCar =Character.toString((char)(temp+leDecalage));
               leCarDecal =Character.toString((char)(temp+leDecalage-26));
                //leTexteCrypte.replace(i,i+1, leCar); //on remplace
     
                if ((char)(temp+leDecalage)>'z')                 //si on depasse z
                      leTexteCrypte.replace(i,i+1, leCarDecal); //on agit en conséquence  
                else
                      leTexteCrypte.replace(i,i+1, leCar); 
     
            }
            JOptionPane.showMessageDialog(null,leTexteCrypte);
        }//cryptage
     
        public static void main(String []telsargs) {
       String leTexte, leDecalCaractere;
            int leDecalInt;
     
       leTexte = JOptionPane.showInputDialog(null, "Quel est ton texte ?");
       leDecalCaractere = JOptionPane.showInputDialog(null, "Quelle est ta decalage ?");
     
            leDecalInt = Integer.parseInt(leDecalCaractere);//convertit le decalage en int
     
            Cesar unCesar = new Cesar(leTexte,leDecalInt);
            //cryptage();
        }       
     
     
    }//class
    Au passage, il y a un debugger très simple d'utilisation dans Netbeans... ça aide à résoudre pas mal de soucis...
    "Errare humanum est, sed perseverare diabolicum"

    Ma page sur DVP.com

  7. #7
    Membre confirmé
    Inscrit en
    Juin 2004
    Messages
    100
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 100
    Par défaut
    Merci beaucoup pour le debugger je vais essayer de voir celà de suite !

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

Discussions similaires

  1. Problème dans la déclaration de Winmain
    Par lvdnono dans le forum DirectX
    Réponses: 3
    Dernier message: 29/05/2004, 13h38
  2. problème dans l'hebergement
    Par Redouane dans le forum ASP
    Réponses: 9
    Dernier message: 31/12/2003, 23h34
  3. Quel est le problème dans ce code ?
    Par Luther13 dans le forum C
    Réponses: 12
    Dernier message: 26/08/2003, 16h09
  4. Problème dans analisys Manager
    Par ien_ien23 dans le forum MS SQL Server
    Réponses: 7
    Dernier message: 11/07/2003, 14h38
  5. Problème dans requête avec count()
    Par BadFox dans le forum Requêtes
    Réponses: 3
    Dernier message: 08/07/2003, 18h02

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