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 :

Cryptage / Décryptage César et Vigenère


Sujet :

avec Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau candidat au Club
    Femme Profil pro
    Lycéen
    Inscrit en
    Avril 2013
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Avril 2013
    Messages : 1
    Par défaut Cryptage / Décryptage César et Vigenère
    Bonjour,

    J'ai un projet de Bac où je dois faire un programme en Java sous Eclipse pour pouvoir crypter et décrypter un message selon le code César. J'ai ajouté le programme que j'ai crée pour crypter le message et j'ai aussi ajouté un programme similaire pour décrypter mais tous deux ne fonctionnent pas.

    En plus de ça, je dois faire un programme pour crypter et décrypter un message avec le chiffre de Vigenère.

    Dans mes programmes j'ai codé une méthode pour que l'utilisateur rentre son message à partir de la console mais normalement je dois l'importer d'un fichier texte (ce que je ne sais pas faire)...

    Quelqu'un saurait-il m'indiquer comment procéder ?

    Voici le programme pour crypter selon le codage de césar
    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
    import java.util.Scanner;
     
    public class cesar
    {
      public static void main(final String[] args)
      {
        // On déclare les variables
        int cle, n, i, code;
        String message, message_crypte;
     
        Scanner clavier = new Scanner(System.in);
     
        // On demande a l'utilisateur le message a crypté que l'on affecte a message
        System.out.println("Rentrer votre message a crypté :");
        message = clavier.nextLine();
     
        // On demande a l'utilisateur sa clé de codage que l'on affecte a cle
        System.out.println("Rentrer votre clé decodage : ");
        cle = clavier.nextInt();
     
        // On détermine la taille du message
        n = message.length();
     
        // On affecte une chaine de caractère vide a message_crypte
        message_crypte = "";
     
        // On parcours tous les caractères du message et pour chaque caratères
        for (i = 0; i <= n - 1; i = i + 1)
          ;
        {
          // On affecte à code le code ASCII du caractère message |i|
           code = code ASCII (message(i));
     
          // On soustrait 32 au code ASCII du caractère message|i|
          code = code - 32;
     
          // On ajoute la clé modulo 95 pour crypter
          code = (code + cle) % 95;
     
          // On ajoute 32 à code pour trouver le code ASCII d'un caractère
          code = code + 32;
     
          // On affecte à code le caractère aSCII dont le code ASCII est code
           code = carASCII(code);
     
          // Concaténer le caractère crypté et message_crypte
          message_crypte = message_crypte + code;
     
        }
     
        // On affiche le message crypté
        System.out.println("Voici votre message crypté :" + message_crypte);
      }
    }
    Programme pour décrypter selon le codage de César :
    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
    import java.util.Scanner;
     
    public class cesar {
     
      public static void main(final String[] args) {
        // On déclare les variables
        int cle, n, i, code;
        String message_crypte, message_decrypte;
     
        final Scanner clavier = new Scanner(System.in);
     
        // On demande a l'utilisateur le message crypté que l'on affecte a
        // message_crypte
        System.out.println("Rentrer votre message crypté :");
        message_crypte = clavier.nextLine();
     
        // On demande a l'utilisateur sa clé de codage que l'on affecte a cle
        System.out.println("Rentrer votre clé decodage : ");
        cle = clavier.nextInt();
     
        // On détermine la taille du message
        n = message_crypte.length();
     
        // On affecte une chaine de caractère vide a message_decrypte
        message_decrypte = "";
     
        // On parcours tous les caractères du message et pour chaque caratères
        for (i = 0; i <= n - 1; i = i + 1) {
          // On affecte à code le code ASCII du caractère message |i|
           code = code ASCII (message(i));
     
          // On soustrait 32 au code ASCII du caractère message|i|
          code = code - 32;
     
          // On ajoute la clé modulo 95 pour décrypter
          code = (code - cle) % 95;
     
          // On ajoute 32 à code pour trouver le code ASCII d'un caractère
          code = code + 32;
     
          // On affecte à code le caractère aSCII dont le code ASCII est code
           code = carASCII(code);
     
          // Concaténer le caractère décrypté et message_decrypte
          message_decrypte = message_decrypte + code;
     
        }
     
        // On affiche le message décrypté
        System.out.println("Voici votre message décrypté :" + message_decrypte);
      }
    }
    Merci d'avance pour votre aide.

  2. #2
    Invité de passage
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    1
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 1
    Par défaut
    Bonsoir man42,

    Au niveau du code pour crypter ta chaîne de caractère il y un ";" qui traine à la ligne 29 et qui n'a rien à faire ici.

    Et sinon voici le code pour crypter avec césar:
    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
     
    Scanner scanner = new Scanner(System.in);		
    String msg = scanner.nextLine();
    int cle = scanner.nextInt();
     
    StringBuilder msgCrypt = new StringBuilder();
    char currentLetter = 0;
    char currentLetterCrypt;
     
    msg = msg.toLowerCase();
     
    for (int i = 0; i < msg.length(); i++) {
    	currentLetter = msg.charAt(i);
    	if((currentLetter >= 'a') && (currentLetter <= 'z')) {
    		currentLetter -= 'a';
    		currentLetterCrypt = (char) ((currentLetter + cle) % 26);
    		currentLetterCrypt += 'a';
    	} else {
    		currentLetterCrypt = currentLetter;
    	}
     
    	msgCrypt.append(currentLetterCrypt);
    }
     
    System.out.println(msgCrypt.toString());
    Dis moi si tu as des problèmes pour le comprendre auquel cas je détaillerai

  3. #3
    Modérateur
    Avatar de kolodz
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2008
    Messages
    2 209
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 209
    Billets dans le blog
    52
    Par défaut
    Bonjour,

    Je ne suis pas sûr qu'il soit sage de gérer soit-même l'encodage. Même si il faut bien s'amuser un peu avec ^^.

    Je propose une autre solution se basant sur des objet un peu plus au niveau :
    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
    import java.util.HashMap;
    import java.util.Map;
     
     
    public class CryptoCesar {
     
    	/**
             * @param args
             */
    	public static void main(String[] args) {
    		// Paramètrage
    		String message = "Mon message de ma mort qui tue !";
    		Map<String, String> chiffrage = new HashMap<String, String>();
    		chiffrage.put("o", "a");
    		chiffrage.put("a", "o");
    		chiffrage.put(" ", "!");
    		chiffrage.put("!", " ");
    		//Utilisation
    		String sb = cryptyCesar(message, chiffrage);
    		// Affichage
    		System.out.println(sb.toString());
    	}
     
    	private static String cryptyCesar(String message,
    			Map<String, String> chiffrage) {
    		StringBuilder sb = new StringBuilder();
    		for (char currentChar : message.toCharArray()) {
    			String currentString = String.valueOf(currentChar);
    			if(chiffrage.containsKey(currentString)){
    				sb.append(chiffrage.get(currentString));
    			} else {
    				sb.append(currentString);
    			}
    		}
    		return sb.toString();
    	}
    }
    Tout se base dans le paramétrage de la liste clé/valeur.

    Cordialement,
    Patrick Kolodziejczyk.
    Si une réponse vous a été utile pensez à
    Si vous avez eu la réponse à votre question, marquez votre discussion
    Pensez aux FAQs et aux tutoriels et cours.

  4. #4
    Membre Expert
    Avatar de yotta
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Septembre 2006
    Messages
    1 093
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2006
    Messages : 1 093
    Par défaut
    Bonsoir,
    Je ne voudrai pas déranger, mais je crois que vous n'avez pas répondu à la question qui est : comment récupérer le texte à crypter depuis un fichier ?
    Aussi, je me permet de compléter vos codes à ces fins en précisant la légende suivante : code bleu = code de l'auteur, code rouge = code ajouté par moi.
    Mais avant tout, posons l'hypothèse que le fichier contenant le texte à crypter se trouve à la racine de C et se nomme test.txt (C:\test.txt).
    Cela donne :


    Pour le code de Akruks :
    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
    BufferedReader lecteur = new BufferedReader(new FileReader("C:\\test.txt"));
    String msg = lecteur.readLine(); // Pour lire la première ligne du fichier. Faire une boucle pour une lecture multi-lignes.
    lecteur.close();
    int cle = scanner.nextInt();
     
    StringBuilder msgCrypt = new StringBuilder();
    char currentLetter = 0;
    char currentLetterCrypt;
     
    msg = msg.toLowerCase();
     
    for (int i = 0; i < msg.length(); i++) {
    	currentLetter = msg.charAt(i);
    	if((currentLetter >= 'a') && (currentLetter <= 'z')) {
    		currentLetter -= 'a';
    		currentLetterCrypt = (char) ((currentLetter + cle) % 26);
    		currentLetterCrypt += 'a';
    	} else {
    		currentLetterCrypt = currentLetter;
    	}
     
    	msgCrypt.append(currentLetterCrypt);
    }
     
    System.out.println(msgCrypt.toString());
    Pour le code de kolodz :
    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
    import java.util.HashMap;
    import java.util.Map;
    import java.io.BufferedReader;
    import java.io.FileReader;
    import java.io.FileNotFoundException;
    import java.io.IOException;
     
    public class CryptoCesar {
     
    	/**
    	 * @param args
    	 */
    	public static void main(String[] args) {
                     try {
    BufferedReader lecteur = new BufferedReader(new FileReader("C:\\test.txt"));
                     String message = lecteur.readLine(); // Pour lire la première ligne du fichier. Faire une boucle pour une lecture multi-lignes.
                     lecteur.close();
                     Map<String, String> chiffrage = new HashMap<String, String>();
    		chiffrage.put("o", "a");
    		chiffrage.put("a", "o");
    		chiffrage.put(" ", "!");
    		chiffrage.put("!", " ");
    		//Utilisation
    		String sb = cryptyCesar(message, chiffrage);
    		// Affichage
    		System.out.println(sb.toString());
                             }
                 catch (FileNotFoundException fileEX) {
                          System.out.println("Erreur, le fichier d'entrée n'a pas été trouvé.");
                          }
                 catch (IOException IOEX) {
                          System.out.println("Erreur de lecture du fichier d'entrée. Ce dernier a été trouvé, mais il n'est pas exploitable.");
                          }
    	}
     
    	private static String cryptyCesar(String message,
    			Map<String, String> chiffrage) {
    		StringBuilder sb = new StringBuilder();
    		for (char currentChar : message.toCharArray()) {
    			String currentString = String.valueOf(currentChar);
    			if(chiffrage.containsKey(currentString)){
    				sb.append(chiffrage.get(currentString));
    			} else {
    				sb.append(currentString);
    			}
    		}
    		return sb.toString();
    	}
    }
    En résumé, il vous faut étudier les classes BufferedReader et FileReader du package java.io de l'api standard Java.
    Une technologie n'est récalcitrante que par ce qu'on ne la connait et/ou comprend pas, rarement par ce qu'elle est mal faite.
    Et pour cesser de subir une technologie récalcitrante, n'hésitez surtout pas à visiter les Guides/Faq du site !

    Voici une liste non exhaustive des tutoriels qui me sont le plus familiers :
    Tout sur Java, du débutant au pro : https://java.developpez.com/cours/
    Tout sur les réseaux : https://reseau.developpez.com/cours/
    Tout sur les systèmes d'exploitation : https://systeme.developpez.com/cours/
    Tout sur le matériel : https://hardware.developpez.com/cours/

Discussions similaires

  1. cryptage/décryptage AES / open SSL avec VB6 ?
    Par Popaul22 dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 24/01/2010, 16h04
  2. RSA Cryptage/Décryptage des String
    Par khaledUSTHB dans le forum VB.NET
    Réponses: 3
    Dernier message: 18/09/2008, 10h49
  3. Cryptage/Décryptage d'un dossier
    Par Ogotcha dans le forum VB.NET
    Réponses: 4
    Dernier message: 11/08/2008, 11h35
  4. [MCRYPT] cryptage/décryptage avec mcrypt
    Par Zobbiwan dans le forum Langage
    Réponses: 7
    Dernier message: 10/08/2007, 09h52
  5. Réponses: 17
    Dernier message: 24/10/2006, 01h45

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