Szyfr wsteczny polega na zapisaniu wyrażenia odwrotnie, czyli: TAJNA INFORMACJA przechodzi na AJCAMROFNI ANJAT. Wiedząc, że użyliśmy szyfru wstecznego odczytamy zaszyfrowany tekst bez żadnego wysiłku. Jednak jeśli użyjemy go do szyfrowania razem z innym algorytmem ktoś może się zniechęcić, że kolejne odszyfrowane litery nie mają sensu.
Istnieje jeszcze druga odmiana tego szyfrowania, która polega na odwracaniu każdego wyrazu z osobna. Jest to metoda, która pozwoli na zwiększenie poziomu bezpieczeństwa, ale jednak wciąż bardzo łatwo odczytać szyfrowany tekst. Niemniej jest to szyfr bardzo ciekawy do zaprogramowania.
Na wejściu otrzymujemy wyrażenie złożone ze spacji oraz małych liter alfabetu łacińskiego. Na wyjście powinno zostać wypisane wyrażenie wspak.
otrzymamy:
Nasza funkcja będzie przyjmowała dwa argumenty: keyboard - ciag znaków opisujący jak wygląda znak oraz txt - tekst, który mamy zaszyfrować:
(1.) Jako argument przyjmuje tekst do odwrócenia. Nie chcemy go modyfikować, o czym świadczy const. Wynikiem funkcji będzie zaszyfrowany tekst typu char*. (2.) Pobieramy długość tekstu wynikowego. (3.) Alokujemy pamięć pod tekst wynikowy. (4.) Dopisujemy na koniec znak \0. (5.) Dla każdego znaku w tekście podanym jako argument s wykonujemy (6.) przepisanie znaków. (7.) Zwracamy wynik.
Deszyfrowanie to ponowne zaszyfrowanie. Nie potrzebujemy tu dodatkowej funkcji.
Tym razem będziemy szyfrować drugą metodą - będzie zapisywać wspak każdy kolejny wyraz. W celu ułatwienia zadania przyjmujemy, że wyraz to ciąg znaków od a do z. Pomiędzy literami mogą występować dowolne znaki interpunkcyjne.
Rozpoczynamy szyfrowanie od (2.) wyliczenia długości tekstu wynikowego, (3.) alokacji pamięci pod tekst wynikowy oraz (4.) zadeklarowania zmiennych from, to. Użyjemy ich do przechowywania pierwszej i ostatniej litery każdego wyrazu.
Wszystkie operacje wykonujemy (5.) dopóki nie natrafimy na znak końca tekstu \0. (6.) Dopóki aktualnie wskazywany znak przez zmienną to jest małą literą alfabetu łacińskiego to (7.) zwiększamy pozycje to. (8.) Dla każdego znaku prócz ostatniego znalezionego wykonujemy algorytm z metody szyfrowania zadania 1 - (9.) zmieniamy pozycję odpowiednich znaków. (10.) Znaku, który oddziela zakończył wyraz przepisujemy oddzielnie. (11.) Przyjmujemy, że następny wyraz zaczyna się pozycję dalej od znaku, który przerwał pętle w (6.). (12.) Zwiększamy pozycję to. W tym momencie zmienne from i to mają znowu te same wartości.
(14.) Dopisujemy znak końca danych na końcu wyniku i (15.) zwracamy wynik.
Funkcja main(), która przetestuje działanie programu wygląda następująco:
Zmodyfikuj kod w (2.), aby wyraz mógł się składać z dużych i małych liter alfabetu łacińskiego.
Przykładowo dla danych:
Wykorzystując dotychczasowe funkcje napisz funkcję change() do szyfrowania i deszyfrowania danych zgodnie z opisaną poniżej metodą szyfrowania:
Szyfrowanie polega na zapisaniu każdego wyrazu oddzielnie wspak, a następnie odwrócenia całego wyrażenia wspak.
Przykładowo dla danych: