Szyfr Swagman to szyfr transpozycyjny, który szyfruje dane na podstawie specjalnie przygotowanego klucza. Klucz to tablica liczb n×n. W każdym wierszu i w każdej kolumnie występują wszystkie liczby ze zbioru {1, 2, .., n}. Wielkość klucza jest dowolna, ale przyjmuje się, że wielkość powinna być nie mniejsza niż 4 i nie większa niż 8. Długość szyfrowanego tekstu musi być wielokrotnością liczby n. Dzięki temu można utworzyć tabelkę n×(długość tekstu / n). Tekst jawny należy wpisać do tabelkami wiersz po wierszu.
Po przygotowaniu tabelki można przejść do dokonania transpozycji. Każda kolumna jest szyfrowana przez kolejną kolumnę klucza w sposób cykliczny. Transpozycja polega na tym, by powiązać i-tą cyfrę z klucza z wybranej kolumny z i-tym znakiem z kolumny tabelki i posortować według wartości klucza. Szyfrogram jset już prawie gotowy. Wystarczy bowiem odczytać kolejne kolumny od góry do dołu.
Weźmy przykładowo tekst "TAJNAINFORMACJA" i następujący klucz:
2 | 3 | 1 |
3 | 1 | 2 |
1 | 2 | 3 |
Warto zauważyć, że w kluczu w każdym wierszu i każdej kolumnie wartości się nie duplikują. Teraz można przejść do rozpisania tabelki dla tekstu jawnego. Ze względu na to, że klucz ma rozmiar n = 3 to szerokość tabeli to 15/3 = 5. Od razu do znaków można dołączyć wartości z klucza w nawiasach.
T (2) | A (3) | J (1) | N (2) | A (3) |
I (3) | N (1) | F (2) | O (3) | R (1) |
M (1) | A (2) | C (3) | J (1) | A (2) |
Teraz w tak przygotowanej tabelce wystarczy posortować każdą kolumnę oddzielnie i odczytać kolejne kolumny od lewej do prawej.
M (1) | N (1) | J (1) | J (1) | R (1) |
T (2) | A (2) | F (2) | N (2) | A (2) |
I (3) | A (3) | C (3) | O (3) | A (3) |
Po zaszyfrowaniu otrzymaliśmy szyfrogram: "MTINAAJFCJNORAA". W celu rozszyfrowania należy wykonać kroki w sposób odwrotny: zapisać ostatni wygląd tabelki. Dopasować liczby do klucza, a następnie odczytać kolejne wiersze.
Przedstawiony poniżej program zakłada poprawność danych wejściowych. W celu uproszczenia kodu klucz jest przechowywany jako tablica liczb i nie jest tworzona żadna dodatkowa tabelka w celu dokonania transpozycji.
Szyfrowanie wymaga podania trzech argumentów: txt - tekst jawny do zaszyfrowania, klucz - lista liczb oraz kluczN - rozmiar tabeli klucza.
(2.) Pobierz długość tekstu i (3.) wylicz szerokość tabelki do zapisu danych. (4.) Przygotuj tablicę pod wynik szyfrogram. (5.) Dla każdego wiersza i (6.) każdej kolumny tablicy: (7.) oblicz, który znak by tam został wstawiony. Następnie (8.) pobierz znak jeśli nie istnieje zastąp domyślnym znakiem tu: spacją. (9.) Z klucza pobierz numer wiersza w kolumnie i (10.) wstaw znak do szyfrogramu w odpowiednie miejsce. Na koniec (13.) dopisz znak końca danych i (14.) zwróć szyfrogram.
Rozszyfrowanie wymaga podania trzech argumentów: txt - szyfrogram do odszyfrowania, klucz - lista liczb oraz kluczN - rozmiar tabeli klucza.
(2.) Pobierz długość tekstu i (3.) wylicz szerokość tabelki do zapisu danych. (4.) Przygotuj tablicę pod wynik szyfrogram. (5.) Dla każdego wiersza i (6.) każdej kolumny tablicy: (7.) numer wiersza w kolumnie i (8.) przepisz odpowiedni znak z szyfrogramu do tekstu wynikowego. Na koniec (11.) dopisz znak końca danych i (12.) zwróć szyfrogram.
W celu przetestowania danych można skorzystać z poniższej funkcji main(). Program wczyta dane oraz wypisze szyfrogram i rozszyfruje go.
Dopisz do programu funkcję sprawdzKlucz(), która sprawdzi czy wprowadzony klucz jest poprawny. Jeśli nie to funkcja szyfrująca/deszyfrująca powinna wypisać na ekran odpowiedni komunikat.