Szyfr vigenère'a był prosty szyfr polialfabetyczny że w zasadzie stosować jedną z kilku szyfrów Cezara, według klucza. Zasadniczo litery w klawiszach wskazują, którego przesuniętego alfabetu należy użyć. W tym celu było proste narzędzie, zwane kwadratem Vigenère:
Tutaj każdy wiersz to osobny alfabet, zaczynający się od odpowiedniej litery klucza. Kolumny służą następnie do ustalenia zaszyfrowanej litery. Deszyfrowanie działa w bardzo podobny sposób, tylko na odwrót.
Załóżmy, że chcemy zaszyfrować ciąg CODEGOLF
. Potrzebujemy również klucza. W takim przypadku kluczem będzie FOOBAR
. Kiedy klucz jest krótszy niż zwykły tekst, przedłużamy go przez powtórzenie, dlatego faktycznie używamy klucza FOOBARFO
. Teraz patrzymy na pierwszą literę klucza, którą jest F
znalezienie alfabetu. Zaczyna się, być może nic dziwnego, od F
. Teraz znajdujemy kolumnę z pierwszą literą tekstu jawnego, a wynikową literą jest H
. W przypadku drugiej litery mamy literę O
kluczową i literę zwykłego tekstu, w wyniku czego C
. Kontynuując w ten sposób, w końcu dostajemy HCRFGFQT
.
Zadanie
Twoim zadaniem jest teraz odszyfrowanie wiadomości przy użyciu klucza. Ponieważ jednak wyrosliśmy z XVI wieku i dysponujemy komputerami, powinniśmy przynajmniej obsługiwać nieco większy alfabet:
abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789
Budowa placu Vigenère jest nadal bardzo podobna, a szyfr nadal działa w ten sam sposób. To tylko trochę ... nieporęczne dać tutaj w całości.
Wkład
Dane wejściowe są podawane na standardowym wejściu jako dwa oddzielne wiersze tekstu, z których każdy kończy się podziałem wiersza. Pierwszy wiersz zawiera klucz, a drugi tekst zaszyfrowany.
Wydajność
Pojedynczy wiersz zawierający odszyfrowaną wiadomość.
Warunki wygranej
Ponieważ szyfrowanie jest czasem uważane za broń, kod powinien być krótki, aby ułatwić łatwy przemyt. Im krótszy, tym lepiej, ponieważ zmniejsza prawdopodobieństwo odkrycia.
Przykładowe dane wejściowe 1
Key
miQ2eEO
Próbka wyjściowa 1
Message
Przykładowe wejście 2
ThisIsAKey
CoqKuGRUw29BiDTQmOpJFpBzlMMLiPb8alGruFbu
Przykładowe wyjście 2
ThisWorksEquallyWellWithNumbers123894576
Minął tydzień. Obecnie najkrótsze rozwiązanie zostało zaakceptowane. Dla zainteresowanych w naszym konkursie mieliśmy następujące zgłoszenia i długości:
130 - Python
146 - Haskell
195 - C
197 - C
267 - VB.NET
A nasze własne rozwiązania, które nie zostały ocenione w rankingu wśród innych:
108 - Ruby
139 - PowerShell