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.
-
Initialisation :
- Créez un tableau
frequenciesde taille 26, où chaque indice représente une lettre de l'alphabet (frequencies[0]représente 'A',frequencies[25]représente 'Z').
- Créez un tableau
-
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 avecfrequencies[currentChar - 'A']++. - Si le caractère est une lettre minuscule (vérifiez avec
'a' <= char <= 'z'), faites de même mais en utilisantfrequencies[currentChar - 'a']++pour ajouter à la bonne position.
-
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.
-
Initialisation :
- Créez une variable
maxIndexqui contiendra l'indice de la lettre la plus fréquente (initialement 0).
- Créez une variable
-
Parcours des fréquences :
- Parcourez le tableau
frequenciesen utilisant une boucle pour comparer chaque fréquence. - Si une fréquence est plus grande que celle à l'index
maxIndex, mettez à jourmaxIndex.
- Parcourez le tableau
-
Retourner la lettre :
- Retournez la lettre associée à l'index
maxIndexen utilisant(char) (maxIndex + 'A').
- Retournez la lettre associée à l'index
É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'.
-
Calcul de la clé :
- Calculez la différence entre la lettre la plus fréquente et 'E' :
int key = mostFrequentChar - 'E'.
- Calculez la différence entre la lettre la plus fréquente et 'E' :
-
Gérer les valeurs négatives :
- Si la clé est négative, ajoutez 26 pour revenir à une clé positive :
if (key < 0) { key += 26; }.
- Si la clé est négative, ajoutez 26 pour revenir à une clé positive :
-
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é).
-
Initialisation :
- Créez un
StringBuildervide qui contiendra le message déchiffré.
- Créez un
-
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'));.
- Calculez sa position d'origine avec
- Si le caractère est une lettre minuscule :
- Utilisez une approche similaire, mais en remplaçant
'A'par'a'.
- Utilisez une approche similaire, mais en remplaçant
- Si le caractère n'est pas une lettre, ajoutez-le directement au
StringBuilder.
-
Retourner le message déchiffré :
- Convertissez le
StringBuilderen chaîne avectoString()et retournez le message.
- Convertissez le