Zadanie 4

Szkolne koło naukowe ENIGMA organizuje międzyklasowy konkurs kalamburów. Przygotowany został zbiór haseł przeznaczonych na pierwszą rundę rozgrywek. Aby uniknąć ujawnienia wybranych wyrazów przed rozpoczęciem konkursu, zostałeś poproszony o ich odpowiednie zabezpieczenie według otrzymanych wytycznych.

Treść wytycznych:

Każde hasło przygotowane na konkurs powinno zostać zaszyfrowane z wykorzystaniem szyfru Playfair.

Działanie szyfru Playfair

Szyfr Playfair bazuje na wykorzystaniu specjalnej tabeli szyfrującej. Składa się ona z 25 niepowtarzających się liter alfabetu łacińskiego ułożonych w kwadracie 5 na 5 znaków. Tworzenie kwadratu rozpoczynamy od wyboru słowa szyfrującego (kluczowego) – to jego literami wypełniamy pierwsze komórki tabeli. Jeśli jakaś litera występuje w słowie kluczowym więcej niż raz, to kolejne jej wystąpienia ignorujemy (nie wstawiamy tej litery po raz kolejny do tablicy). Resztę pustych miejsc wypełniamy pozostałymi (niewystępującymi w słowie szyfrującym) literami alfabetu według standardowej kolejności alfabetycznej. Przyjmujemy, że litery I oraz J zajmują to samo miejsce w tabeli.

Szyfrowanie wybranego tekstu jawnego rozpoczynamy od podziału go na pary liter. Jeśli w tekście występują znaki inne niż litery, np. znaki interpunkcyjne lub spacje, należy je wcześniej usunąć. Jeżeli ostatniej literze brakuje pary, dodajemy do niej kolejną literę w alfabecie (jeśli ostatnią literą jest Z, parę uzupełniamy literą A).

Z przygotowaną tablicę szyfrującą oraz tekstem jawnym podzielonym na pary, możliwe jest przeprowadzenie procesu szyfrowania. Polega ono na wykonaniu odpowiedniej operacji dla każdej z par znaków. Typ operacji zależy od umiejscowienia liter w kwadracie szyfrującym.

Możliwe warianty:

  • Jeśli obie litery znajdują się w tym samym wierszu tabeli, każda z nich zostaje zamieniona na literę sąsiadującą z nią po prawej stronie. Dodatkowo, jeśli któraś z liter umiejscowiona jest na ostatniej pozycji w wierszu (czyli w tabeli nie ma litery sąsiadującej z nią po prawej stronie), wówczas zostaje ona zamieniona na literę z pierwszej kolumny danego wiersza.

  • Jeśli obie litery znajdują się w tej samej kolumnie tabeli, każda z nich zostaje zamieniona na literę sąsiadującą poniżej. Analogicznie do zasady pierwszej: jeżeli rozpatrywana litera nie posiada sąsiada na dole, wówczas pobieramy literę z pierwszego wiersza tej samej kolumny.

  • Jeśli litery z danej pary nie są ani w tej samej kolumnie, ani w tym samym wierszu, literę aktualnie szyfrowaną zastępujemy znakiem, który znajduje się na przecięciu wiersza wyznaczanego przez szyfrowaną literę, oraz kolumny, w której jest zapisana druga litera z pary.

W pliku dane.txt znajduje się 10 wierszy z hasłami konkursowymi oraz kluczami do ich zaszyfrowania. Każdy wiersz zawiera dwa oddzielone pojedynczym znakiem spacji słowa (ciągi znaków) złożone z wielkich liter alfabetu łacińskiego (z pominięciem litery J) o maksymalnej długości 20 znaków. Pierwszy wyraz to klucz szyfrujący, drugi – hasło do zaszyfrowania.

W wybranym języku programowania napisz program, który za pomocą szyfru Playfair zaszyfruje podane hasła konkursowe z wykorzystaniem odpowiadających im kluczy szyfrujących. Otrzymany szyfrogramy zapisz w pliku wyniki.txt w oddzielnych wierszach zgodnie z kolejnością danych w pliku dane.txt.

Przykładowe dane:

Linia 1. BANAN EGZEGEZA. Linia 2. APOTEOZA AMBIWALENTNY. Linia 3. PLIK FOLDER.

Odpowiedź dla przykładowych danych:

Linia 1. FHVIHFWD. Linia 2. ZUCHUOSFRPSV. Linia 3. OUICCT.

Plik dane.txt:

RX0rWW1v37jmg

Przycisk do pobrania pliku TXT z treścią zadania.

Plik TXT o rozmiarze 191.00 B w języku polskim

Do oceny oddajesz:

  • plik wyniki.txt z odpowiedzią (zaszyfrowanymi słowami z pliku dane.txt; każde w osobnej linii z zachowaniem identycznej kolejności jak w pliku wejściowym);

  • plik(i) z komputerową realizacją zadania (kodem programu).

11
Pokaż ćwiczenia:

Działanie programów zapisanych w testerkach przetestuj dla klucza BANAN oraz hasła EGZEGEZA.

1

JĘZYK C++

21
Ćwiczenie 1
R15SH82GJhbuV1
Wymyśl pytanie na kartkówkę związane z tematem materiału.
1

JĘZYK JAVA

21
Ćwiczenie 2
R1Q2MZboBdARr1
Wybierz jedno nowe słowo poznane podczas dzisiejszej lekcji i ułóż z nim zdanie.
1

JĘZYK PYTHON

21
Ćwiczenie 3
R1IRoyIveBs5o1
Wymyśl pytanie na kartkówkę związane z tematem materiału.

Odpowiedź do zadania

Odpowiedź do zadania dla danych z pliku dane.txt:

RZiKrjrUJ9Mro

Przycisk do pobrania pliku TXT z wynikiem zadania.

Plik szyfr.txt.
Plik TXT o rozmiarze 126.00 B w języku polskim