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: