programmation Java (école d'ingénieur) · Chapitre 6 · Exercice de TD
Chiffre de Vigenère
Chaînes de caractères et entrées · niveau 3 (difficile)
Énoncé
Le chiffre de César décale toutes les lettres du même rang. Le chiffre de Vigenère utilise une clé : la -ième lettre du message est décalée du rang de la -ième lettre de la clé ('a' décale de , 'b' de …), la clé étant répétée autant que nécessaire. Seules les lettres minuscules sont chiffrées, et seules elles font avancer dans la clé. Écrire static String vigenere(String texte, String cle, boolean chiffrer), puis chiffrer et déchiffrer attaque a l'aube avec la clé clef.
Corrigé
static String vigenere(String texte, String cle, boolean chiffrer) {
StringBuilder sb = new StringBuilder();
int k = 0; // position dans la clé
for (int i = 0; i < texte.length(); i++) {
char c = texte.charAt(i);
if (c >= 'a' && c <= 'z') {
int d = cle.charAt(k % cle.length()) - 'a'; // décalage de cette lettre
if (!chiffrer) d = 26 - d; // déchiffrer : décalage inverse
sb.append((char) ('a' + (c - 'a' + d) % 26));
k++;
} else {
sb.append(c);
}
}
return sb.toString();
}
cexfsfi f n'lygg -> attaque a l'aube
Le compteur k n'avance que sur les lettres : les espaces et l'apostrophe ne consomment pas de lettre de la clé. Contrairement à César, une même lettre du message n'est pas toujours chiffrée de la même façon : les quatre a de attaque a l'aube deviennent c, f, f et l. Le chiffre résiste ainsi mieux à l'analyse des fréquences des lettres.
100 % gratuit
La suite du chapitre est sur Adloun
- 10 autres exercices corrigés dans ce chapitre
- Les 2 QCM du chapitre, le premier sans compte
- Le podcast et la vidéo du chapitre : 2 minutes d'écoute sans compte
- Le tuteur, qui guide pas à pas sans donner la réponse
Sans compte : le cours, le premier QCM et 2 minutes de podcast et de vidéo. Exercices et tuteur : inscription gratuite en 30 secondes, sans carte bancaire.