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 :
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