Vigenère, ou comment faire mieux que César

Cette semaine, c'est Romane qui vous propose un #KataOfTheWeek : Chiffrement de Vigenère

Briefing du Kata : Pour réaliser un chiffrement de Vigenère, il faut dans un premier temps disposer ou construire une Table de Vigenère :

Table de Vigenère

Ensuite, il s'agit de superposer la clé et le message à transcrire comme dans l'exemple suivant :

mot clé : takima

message : masteringtechnology

superposition :
takimatakimatakimat
masteringtechnology

Enfin il s'agit de transposer chacune des lettres du message en clair, en fonction de la lettre de la clé qui lui est associée et de la table de Vigenère. Par exemple, la première lettre chiffrée sera la lettre à l'intersection de la colonne T et de la ligne M.

Pour résoudre ce kata, tu dois écrire la méthode qui, à partir d'un message et de la clé, retourne le message chiffré.

Saurez-vous résoudre le problème ?

Bon courage !


Et voici une solution proposée par l'auteur en Java :

public static String cipher(String word, String key) {
    List<Character> alphabet = Arrays.asList('a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z');

    StringBuffer newWord = new StringBuffer();

    for (int i = 0; i < word.length(); ++i) {
        char keyLetter = key.charAt(i % key.length());
        int keyLetterIndex = alphabet.indexOf(keyLetter);

        int newLetterIndex = (keyLetterIndex + alphabet.indexOf(word.charAt(i))) % alphabet.size();
        char newLetter = alphabet.get(newLetterIndex);

        newWord.append(newLetter);
    }

    return newWord.toString();
}

Votre équipe TakiVeille

TakiVeille

TakiVeille