Przed zaszyfrowaniem danych ustalamy klucz według którego będziemy szyfrować. Przykładowo jest to tytułowa nazwa szyfru - KARPATY. Szyfrowanie polega doklejeniu do każdej litery tekstu jawnego kolejnej litery klucza. W ten sposób powstaje szyfrogram. W przypadku, gdy tekst jawny jest dłuższy niż klucz to po ostatniej literce klucza zaczynamy brać literki klucza od początku. W celu odczytania ukrytej wiadomości wystarczy odczytać co drugą literę tekstu zaszyfrowanego.
Weźmy przykładowo teraz tekst jawny INFORMACJA oraz klucz KARPATY. Rozrysujmy teraz tabelkę, aby łatwiej było zrozumieć metodę szyfrowania.
Tekst jawny | I | N | F | O | R | M | A | C | J | A |
---|---|---|---|---|---|---|---|---|---|---|
Literka z klucza | K | A | R | P | A | T | Y | K | A | R |
Powstała para | IK | NA | FR | OP | RA | MT | AY | CK | JA | AR |
Odczytując kolejne powstałe pary odczytujemy szyfrogram: IKNAFROPRAMTAYCKJAAR.
Klucz można ustalić dowolny, dlatego napiszemy teraz funkcję, która na wejściu otrzyma dwie linijki tekstu. W pierwszej linijce tekstu będzie tekst jawny do zaszyfrowania, a w drugiej będzie słowo klucz ( albo i nawet całe zdanie klucz!). Na wyjście powinien zostać wypisany tekst zaszyfrowany zgodnie z szyfrem Karpaty.
otrzymamy szyfrogram:
Przed rozpoczęciem szyfrowania należy zauważyć, że teksty wynikowy jest dwa razy dłuższy od tekstu jawnego, ostatnią literą w szyfrogramie jest litera z klucza.
(1.) Będziemy zwracać tablicę znaków char* na podstawie argumentów txt - tekst do zaszyfrowania oraz code - wyrażenie klucz. (2.) Wyliczamy długość szyfrogramu. (3.) Alokujemy pamięć pod tekst wynikowy. (4.) Dla każdego znaku w tekście jawnym txt (razem ze znakiem końca danych \0): (5.) Na pozycję parzystą przepisujemy kolejną literę tekstu jawnego oraz (6.) kolejną literę z klucza. Używamy tu funkcji modulo %, aby nie wyjść poza zakres tablicy code. Po wszystkich iteracjach (8.) zwracamy wynik.
Deszyfrowanie polega na odczytaniu co drugiej literki, dlatego funkcja deszyfrująca będzie przyjmowała tylko argument txt - tekst do rozszyfrowania:
(2.) Wyliczamy długość tekstu jawnego. (3.) Alokujemy pamięć pod tekst wynikowy. (4.) Dla co drugiego znaku w szyfrogramie (5.) przepisujemy na kolejne pozycję w tablicy wynikowej. (5.) Zwracamy wynik.
Funkcja main(), która przetestuje działanie programu wygląda następująco:
Zmodyfikuj funkcję szyfrującą, aby wszystkie małe znaki alfabetu łacińskiego były dużymi. Nie wolno modyfikować tekstu wejściowego oraz nagłówka funkcji cipher().
Po podaniu poniższych danych:
program powinien wypisać następujący szyfrogram: