TD3 Exercice: Craquez l'algo de César


Craquez l'algo de César

Étapes pas à pas pour que les étudiants complètent le code

Étape 1 : Implémenter la méthode countLetterFrequencies

Objectif : Compter la fréquence des lettres dans le texte chiffré. Le tableau frequencies contiendra 26 cases pour chaque lettre de l'alphabet, que ce soit en majuscule ou en minuscule.

  1. Initialisation :

    • Créez un tableau frequencies de taille 26, où chaque indice représente une lettre de l'alphabet (frequencies[0] représente 'A', frequencies[25] représente 'Z').
  2. Parcours du message :

    • Utilisez une boucle pour parcourir chaque caractère du message.
    • Si le caractère est une lettre majuscule (vérifiez avec 'A' <= char <= 'Z'), ajoutez 1 à la fréquence correspondante en calculant l'index avec frequencies[currentChar - 'A']++.
    • Si le caractère est une lettre minuscule (vérifiez avec 'a' <= char <= 'z'), faites de même mais en utilisant frequencies[currentChar - 'a']++ pour ajouter à la bonne position.
  3. Retourner les fréquences :

    • Une fois le parcours terminé, retournez le tableau des fréquences.

Étape 2 : Implémenter la méthode findMostFrequentLetter

Objectif : Trouver la lettre la plus fréquente dans le tableau de fréquences.

  1. Initialisation :

    • Créez une variable maxIndex qui contiendra l'indice de la lettre la plus fréquente (initialement 0).
  2. Parcours des fréquences :

    • Parcourez le tableau frequencies en utilisant une boucle pour comparer chaque fréquence.
    • Si une fréquence est plus grande que celle à l'index maxIndex, mettez à jour maxIndex.
  3. Retourner la lettre :

    • Retournez la lettre associée à l'index maxIndex en utilisant (char) (maxIndex + 'A').

Étape 3 : Implémenter la méthode calculateKey

Objectif : Calculer la clé de déchiffrement en supposant que la lettre la plus fréquente dans le texte chiffré est un 'E'.

  1. Calcul de la clé :

    • Calculez la différence entre la lettre la plus fréquente et 'E' : int key = mostFrequentChar - 'E'.
  2. Gérer les valeurs négatives :

    • Si la clé est négative, ajoutez 26 pour revenir à une clé positive : if (key < 0) { key += 26; }.
  3. Retourner la clé :

    • Retournez la clé calculée.

Étape 4 : Implémenter la méthode decryptMessage

Objectif : Déchiffrer le message chiffré en appliquant le décalage inverse (la clé).

  1. Initialisation :

    • Créez un StringBuilder vide qui contiendra le message déchiffré.
  2. Parcours du message chiffré :

    • Parcourez chaque caractère du message.
    • Si le caractère est une lettre majuscule :
      • Calculez sa position d'origine avec int originalPosition = (currentChar - 'A' - key + 26) % 26;.
      • Ajoutez le caractère déchiffré à StringBuilder : decryptedMessage.append((char) (originalPosition + 'A'));.
    • Si le caractère est une lettre minuscule :
      • Utilisez une approche similaire, mais en remplaçant 'A' par 'a'.
    • Si le caractère n'est pas une lettre, ajoutez-le directement au StringBuilder.
  3. Retourner le message déchiffré :

    • Convertissez le StringBuilder en chaîne avec toString() et retournez le message.