Adloun

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

Exercice suivant et tuteur

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.

Le cours du chapitre · Tous les exercices du chapitre

Exercice suivant et tuteur →