Szyfr polega na specjalnym przestawieniu liter. Do szyfrowania potrzebny jest klucz n, który jest liczbą całkowitą, dodatnią. Klucz określa ile liter znajduje się w grupie. Innymi słowy podczas szyfrowania otrzymujemy x grup, gdzie x to wynik podzielenia długości tekstu przez n. (Wynik oczywiście należy zaokrąglić w górę.) Podczas szyfrowania pierwszą literę wstawiamy do pierwszej grupy, drugą literę do drugiej grupy ... x-tą literę do x-tej grupy, a litera o indeksie x + 1 trafi do pierwszej grupy itd... Znaki wrzucamy dopóki pozostały jakiekolwiek litery. Następnie kolejno litery z każdej grupy zapisuje się koło siebie. Szyfrogram jest gotowy.
Przykładowo szyfrując tekst TAJNA INFORMACJA i kluczem n = 3 to na początek wyliczamy ile jest grup: . Czyli należy utworzyć 6 grup po 3 litery. Oczywiście niektóry grupy nie będą zapełnione całkowicie. Wolne miejsca zostaną wypełnione spacją. Rozmieszczenie liter w każdej grupie wygląda następująco:
Grupa 1 | Grupa 2 | Grupa 3 | Grupa 4 | Grupa 5 | Grupa 6 |
---|---|---|---|---|---|
T, I, A | A, N, C | J, F, J | N, O, A | A, R, _ | _, M, _ |
Zaszyfrowany tekst ma postać: "TIAANCJFJNOAAR M ". Chcąc rozszyfrować wystarczy podzielić zaszyfrowany tekst z powrotem na grupy po n elementów, a następnie wykonać n pętli i w i-tej iteracji odczytać wszystkie i-te element z każdej grupy.
Przykładowo szyfrując tekst INFORMACJA i kluczem n = 4 to na początek wyliczamy ile jest grup: . Czyli należy utworzyć 3 grupy po 4 litery. Grupy wyglądają następująco:
Grupa 1 | Grupa 2 | Grupa 3 |
---|---|---|
I, O, A, A | N, R, C, _ | F, M, J, _ |
Zaszyfrowany tekst ma postać: "IOAANRC FMJ ".
Podczas szyfrowania należy pamiętać, że dla pewnego tekstu o długości l i klucza n potrzebne będzie n·x pozycji, gdzie . Oczywiście nie należy twierdzić, że w takim razie będzie potrzebne tylko l pozycji, bo !
(2.) Wyliczenie ile będzie grup. (3.) Wyliczenie długości tekstu zaszyfrowanego. (4.) Alokacja pamięci pod szyfrogram. (5.) Dla każdego pozycji: (6.) wybranie odpowiedniego znaku i zapisanie na odpowiedniej pozycji. Wskazówka: Można zapobiec porównywaniu w każdej iteracji rozpisując pętle na dwie pętle (jedna przepisuje znaki, a druga dopisuje znaki spacji na wolnych pozycjach). (8.) Dopisanie znaku końca danych i (9.) zwrócenie wyniku.
Jak w większości szyfrów deszyfrowanie jest znacznie prostsze: wystarczy tylko poprzestawiać znaki z powrotem:
(2.) Wyliczenie ile będzie grup. (3.) Ustalenie długości wyniku. (4.) Alokacja pamięci pod tekst niezaszyfrowany. (5.) Dla każdego pozycji: (6.) wybranie odpowiedniego znaku i zapisanie na odpowiedniej pozycji. (8.) Dopisanie znaku końca danych i (9.) zwrócenie wyniku.
Funkcja można przetestować przy pomocy poniższej funkcji:
W pierwszej linijce należy podać tekst do zaszyfrowania, a w drugiej klucz n. Przykładowo:
zostanie zwrócone:
Napisz program, który do szyfrowanie przyjmie dodatkowy klucz k, który określi o ile pozycji w alfabecie ma być przesunięty i-ty znak. Wskazówka: zamiana tak jak w Szyfrze Cezara
Przykładowo dla danych:
otrzymujemy: