Le chiffrement Vigenère était un chiffrement polyalphabétique simple qui appliquait essentiellement l'un des chiffrements César, selon une clé. Fondamentalement, les lettres de la touche indiquent l'alphabet décalé à utiliser. À cette fin, il y avait un outil simple, appelé le carré Vigenère:
Ici, chaque ligne est un alphabet distinct, commençant par la lettre correspondante de la clé. Les colonnes sont ensuite utilisées pour déterminer la lettre chiffrée. Le déchiffrement fonctionne à peu près de la même manière, mais vice-versa.
Supposons que nous voulons chiffrer la chaîne CODEGOLF
. Nous avons également besoin d'une clé. Dans ce cas, la clé doit être FOOBAR
. Lorsque la clé est plus courte que le texte en clair, nous l'étendons par répétition, donc la clé réelle que nous utilisons est FOOBARFO
. Nous recherchons maintenant la première lettre de la clé, qui est F
de trouver l'alphabet. Cela commence, peut-être sans surprise, par F
. Maintenant, nous trouvons la colonne avec la première lettre du texte en clair et la lettre résultante est H
. Pour la deuxième lettre, nous avons O
comme lettre clé et la lettre de texte brut, résultant en C
. En continuant ainsi, nous arrivons enfin HCRFGFQT
.
Tâche
Votre tâche consiste maintenant à déchiffrer les messages, à l'aide d'une clé. Cependant, depuis que nous avons dépassé le XVIe siècle et que nous avons des ordinateurs, nous devrions au moins prendre en charge un alphabet légèrement plus grand:
abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789
La construction de la place Vigenère est toujours à peu près la même et le chiffre fonctionne toujours de la même manière. C'est juste un peu ... difficile à donner ici en entier.
Contribution
L'entrée est donnée sur l'entrée standard sous la forme de deux lignes de texte distinctes, chacune terminée par un saut de ligne. La première ligne contient la clé tandis que la seconde contient le texte chiffré.
Sortie
Une seule ligne, contenant le message déchiffré.
Condition gagnante
Le cryptage étant parfois considéré comme une arme, le code doit être court pour faciliter la contrebande. Le plus court sera le mieux, car cela réduit la probabilité de découverte.
Exemple d'entrée 1
Key
miQ2eEO
Exemple de sortie 1
Message
Exemple d'entrée 2
ThisIsAKey
CoqKuGRUw29BiDTQmOpJFpBzlMMLiPb8alGruFbu
Exemple de sortie 2
ThisWorksEquallyWellWithNumbers123894576
Une semaine s'est écoulée. La solution actuellement la plus courte a été acceptée. Pour les personnes intéressées, dans notre concours, nous avions les soumissions et les longueurs suivantes:
130 - Python
146 - Haskell
195 - C
197 - C
267 - VB.NET
Et nos propres solutions qui n'étaient pas classées avec les autres:
108 - Rubis
139 - PowerShell