Projekt – co zamierzamy napisać?

Pierwszym krokiem, jaki musimy wykonać, jest ustalenie, do czego ma służyć nasz program oraz jak ma wyglądać jego interfejs. W tym wypadku stworzymy program, który najpierw pozwoli nam wybrać metodę, z której będziemy korzystać podczas naszych działań, a następnie zdecydować, czy chcemy szyfrować, czy też deszyfrować tekst.

Szyfr Cezara

Najważniejsze informacje dotyczące szyfrowania oraz deszyfrowania wiadomości za pomocą szyfru Cezara oraz jego implementacji w języku C++ znajdziesz w następujących e‑materiałach:

Szyfr Vigenère'a

Najważniejsze informacje dotyczące szyfrowania oraz deszyfrowania wiadomości za pomocą szyfru Vigenère'a oraz jego implementacji w języku C++ znajdziesz w następujących e‑materiałach:

Projekt – kod źródłowy

Aby kod źródłowy był jak najbardziej przejrzysty i czytelny, napiszemy go, dzieląc poszczególne etapy działania programu na osobne funkcje.

Krok 1

Na początku umieszczamy dobrze znany nam szkielet każdego programu pisanego w języku C++:

Linia 1. kratka include otwórz nawias ostrokątny iostream zamknij nawias ostrokątny. Linia 3. using namespace std średnik. Linia 5. int main otwórz nawias okrągły zamknij nawias okrągły. Linia 6. otwórz nawias klamrowy. Linia 8. zamknij nawias klamrowy.

Krok 2

Kolejnym krokiem będzie zapisanie nieskończonej pętli, by możliwe było wielokrotne szyfrowanie i deszyfrowanie przy pomocy naszego programu bez jego ponownego uruchamiania.

Linia 1. kratka include otwórz nawias ostrokątny iostream zamknij nawias ostrokątny. Linia 3. using namespace std średnik. Linia 5. int main otwórz nawias okrągły zamknij nawias okrągły. Linia 6. otwórz nawias klamrowy. Linia 8. while otwórz nawias okrągły true zamknij nawias okrągły. Linia 9. otwórz nawias klamrowy. Linia 11. zamknij nawias klamrowy. Linia 13. zamknij nawias klamrowy.

Krok 3

Następnie zadeklarujemy zmienne, w których będziemy przechowywali informację o wybranej opcji w naszym menu. Nasz program będzie składał się z dwóch menu (jedno z możliwością rozbudowy o dodatkowe metody szyfrowania), zatem do przechowywania wyboru, jakiego dokona użytkownik, zadeklarujemy zmienną typu int. Natomiast druga zmienna może mieć tylko dwie wartości, ponieważ możemy albo szyfrować, albo deszyfrować, więc będzie to zmienna typu logicznego bool.

Linia 1. kratka include otwórz nawias ostrokątny iostream zamknij nawias ostrokątny. Linia 3. using namespace std średnik. Linia 5. int main otwórz nawias okrągły zamknij nawias okrągły. Linia 6. otwórz nawias klamrowy. Linia 7. int MetodaSzyfrowania średnik. Linia 8. bool CzySzyfrujemy średnik. Linia 10. while otwórz nawias okrągły true zamknij nawias okrągły. Linia 11. otwórz nawias klamrowy. Linia 13. zamknij nawias klamrowy. Linia 15. zamknij nawias klamrowy.

Krok 4

Stwórzmy teraz funkcję odpowiedzialną za wyświetlenie menu oraz wybór metody szyfrowania/deszyfrowania.

Linia 1. int StworzMenu otwórz nawias okrągły zamknij nawias okrągły. Linia 2. otwórz nawias klamrowy. Linia 3. int menu średnik. Linia 4. do otwórz nawias klamrowy. Linia 5. cout otwórz nawias ostrokątny otwórz nawias ostrokątny cudzysłów Wybierz metode szyfrowania dwukropek cudzysłów otwórz nawias ostrokątny otwórz nawias ostrokątny endl otwórz nawias ostrokątny otwórz nawias ostrokątny endl średnik. Linia 6. cout otwórz nawias ostrokątny otwórz nawias ostrokątny cudzysłów 1 kropka Szyfr Cezara cudzysłów otwórz nawias ostrokątny otwórz nawias ostrokątny endl średnik. Linia 7. cout otwórz nawias ostrokątny otwórz nawias ostrokątny cudzysłów 2 kropka Szyfr Vigenere apostrof a cudzysłów otwórz nawias ostrokątny otwórz nawias ostrokątny endl średnik. Linia 8. cout otwórz nawias ostrokątny otwórz nawias ostrokątny cudzysłów 3 kropka Wyjscie cudzysłów otwórz nawias ostrokątny otwórz nawias ostrokątny endl średnik. Linia 9. cin zamknij nawias ostrokątny zamknij nawias ostrokątny menu średnik. Linia 11. if otwórz nawias okrągły menu znak równości znak równości 3 zamknij nawias okrągły. Linia 12. exit otwórz nawias okrągły 0 zamknij nawias okrągły średnik. Linia 14. system otwórz nawias okrągły cudzysłów cls cudzysłów zamknij nawias okrągły średnik. Linia 15. zamknij nawias klamrowy while otwórz nawias okrągły menu wykrzyknik znak równości 1 ampersant ampersant menu wykrzyknik znak równości 2 zamknij nawias okrągły średnik. Linia 17. return menu średnik. Linia 18. zamknij nawias klamrowy.
  • Linia pierwsza naszej funkcji – nagłówek. W omawianym wypadku jest to funkcja typu int, ponieważ będziemy zwracali numer opcji wybranej przez użytkownika.

  • Następnie deklarujemy zmienną menu, w której będzie przechowywane to, co wybrał użytkownik.

  • Tworzymy pętlę do..while() z warunkiem menu != 1 && menu != 2, by pętla wykonywała się, dopóki nie zostanie wybrana odpowiednia opcja z menu.

  • Wypisujemy możliwe opcje w menu oraz odpowiadające im liczby, jakie ma wprowadzić użytkownik.

  • Wczytujemy wybór użytkownika do zmiennej menu.

  • Ponieważ trzecia opcja w naszym menu to wyjście, musimy sprawdzić, czy użytkownik jej nie wybrał.

  • Jeśli tak, zamykamy program poleceniem exit(0)instrukcja exit()exit(0)

  • W przeciwnym wypadku używamy polecenia system("cls"), by wyczyścić ekran konsoli z poprzednio wyświetlonego menu. Polecenie system pochodzi z biblioteki Windows.h, którą musimy dołączyć poleceniem:

Linia 1. kratka include otwórz nawias ostrokątny Windows kropka h zamknij nawias ostrokątny.
  • Po wyjściu z pętli mamy pewność, że liczba, którą podał użytkownik, jest przypisana do jednej z opcji w menu, zatem możemy ją zwrócić w miejsce wywołania.

Krok 5

Stwórzmy funkcję odpowiedzialną za wyświetlanie menu oraz wybór, czy użytkownik chce szyfrować, czy deszyfrować wiadomość.

Linia 1. bool SzyfrDeszyfr otwórz nawias okrągły zamknij nawias okrągły. Linia 2. otwórz nawias klamrowy. Linia 3. int szyfr średnik. Linia 4. do otwórz nawias klamrowy. Linia 5. cout otwórz nawias ostrokątny otwórz nawias ostrokątny cudzysłów 1 kropka Szyfrowanie cudzysłów otwórz nawias ostrokątny otwórz nawias ostrokątny endl średnik. Linia 6. cout otwórz nawias ostrokątny otwórz nawias ostrokątny cudzysłów 2 kropka Deszyfrowanie cudzysłów otwórz nawias ostrokątny otwórz nawias ostrokątny endl średnik. Linia 7. cin zamknij nawias ostrokątny zamknij nawias ostrokątny szyfr średnik. Linia 9. system otwórz nawias okrągły cudzysłów cls cudzysłów zamknij nawias okrągły średnik. Linia 10. zamknij nawias klamrowy while otwórz nawias okrągły szyfr wykrzyknik znak równości 1 ampersant ampersant szyfr wykrzyknik znak równości 2 zamknij nawias okrągły średnik. Linia 12. if otwórz nawias okrągły szyfr znak równości znak równości 1 zamknij nawias okrągły. Linia 13. return true średnik. Linia 14. else. Linia 15. return false średnik. Linia 16. zamknij nawias klamrowy.
  • Linia pierwsza funkcji - nagłówek. Nasza funkcja jest typu bool, ponieważ będziemy zwracali to, co wybrał użytkownik, a ma on do wyboru tylko dwie opcje: szyfrowanie bądź deszyfrowanie.

  • Następnie deklarujemy zmienną szyfr, w której będzie przechowywane to, co wybrał użytkownik.

  • Tworzymy pętlę do..while() z warunkiem menu != 1 && menu != 2, by pętla wykonywała się, dopóki nie zostanie wybrana odpowiednia opcja z menu.

  • Wypisujemy możliwe opcje w menu oraz odpowiadające im liczby, jakie ma wprowadzić użytkownik.

  • Wczytujemy wybór użytkownika do zmiennej szyfr.

  • Używamy polecenia system("cls"), by wyczyścić ekran konsoli z poprzednio wyświetlonego menu.

  • Po wyjściu z pętli sprawdzamy, czy użytkownik wybrał opcję szyfrowania. Jeśli tak, to zwracamy w miejsce wywołania naszej funkcji prawda, w przeciwnym przypadku zwracamy fałsz.

Krok 6

W funkcji main wywołujemy funkcje odpowiedzialne za wyświetlanie obu menu.

Linia 1. kratka include otwórz nawias ostrokątny iostream zamknij nawias ostrokątny. Linia 3. using namespace std średnik. Linia 5. int main otwórz nawias okrągły zamknij nawias okrągły. Linia 6. otwórz nawias klamrowy. Linia 7. int MetodaSzyfrowania średnik. Linia 8. bool CzySzyfrujemy średnik. Linia 10. while otwórz nawias okrągły true zamknij nawias okrągły. Linia 11. otwórz nawias klamrowy. Linia 12. MetodaSzyfrowania znak równości StworzMenu otwórz nawias okrągły zamknij nawias okrągły średnik. Linia 13. CzySzyfrujemy znak równości SzyfrDeszyfr otwórz nawias okrągły zamknij nawias okrągły średnik. Linia 14. zamknij nawias klamrowy. Linia 16. zamknij nawias klamrowy.

Ponieważ funkcje zwracają wybory wskazane przez użytkownika, przypisujemy je do odpowiednio zadeklarowanych zmiennych MetodaSzyfrowania oraz CzySzyfrujemy.

Krok 7

Deklarujemy ciąg znaków typu string – zapiszemy w nim wiadomość, którą będziemy szyfrować bądź deszyfrować.

Linia 1. kratka include otwórz nawias ostrokątny iostream zamknij nawias ostrokątny. Linia 3. using namespace std średnik. Linia 5. int main otwórz nawias okrągły zamknij nawias okrągły. Linia 6. otwórz nawias klamrowy. Linia 7. int MetodaSzyfrowania średnik. Linia 8. bool CzySzyfrujemy średnik. Linia 10. while otwórz nawias okrągły true zamknij nawias okrągły. Linia 11. otwórz nawias klamrowy. Linia 12. MetodaSzyfrowania znak równości StworzMenu otwórz nawias okrągły zamknij nawias okrągły średnik. Linia 13. CzySzyfrujemy znak równości SzyfrDeszyfr otwórz nawias okrągły zamknij nawias okrągły średnik. Linia 15. string wiadomosc średnik. Linia 17. zamknij nawias klamrowy. Linia 19. zamknij nawias klamrowy.

Krok 8

Wyświetlamy odpowiedni komunikat w zależności od tego, czy użytkownik wybrał opcję szyfrowania, czy deszyfrowania.

Linia 1. kratka include otwórz nawias ostrokątny iostream zamknij nawias ostrokątny. Linia 3. using namespace std średnik. Linia 5. int main otwórz nawias okrągły zamknij nawias okrągły. Linia 6. otwórz nawias klamrowy. Linia 7. int MetodaSzyfrowania średnik. Linia 8. bool CzySzyfrujemy średnik. Linia 10. while otwórz nawias okrągły true zamknij nawias okrągły. Linia 11. otwórz nawias klamrowy. Linia 12. MetodaSzyfrowania znak równości StworzMenu otwórz nawias okrągły zamknij nawias okrągły średnik. Linia 13. CzySzyfrujemy znak równości SzyfrDeszyfr otwórz nawias okrągły zamknij nawias okrągły średnik. Linia 15. string wiadomosc średnik. Linia 17. cout otwórz nawias ostrokątny otwórz nawias ostrokątny cudzysłów Podaj wiadomosc do cudzysłów średnik. Linia 19. if otwórz nawias okrągły CzySzyfrujemy znak równości znak równości true zamknij nawias okrągły. Linia 20. cout otwórz nawias ostrokątny otwórz nawias ostrokątny cudzysłów zaszyfrowania dwukropek cudzysłów średnik. Linia 21. else. Linia 22. cout otwórz nawias ostrokątny otwórz nawias ostrokątny cudzysłów odszyfrowania dwukropek cudzysłów średnik. Linia 23. zamknij nawias klamrowy. Linia 24. zamknij nawias klamrowy.

Krok 9

Wczytujemy wiadomość, na której będziemy działać.

Linia 1. kratka include otwórz nawias ostrokątny iostream zamknij nawias ostrokątny. Linia 3. using namespace std średnik. Linia 5. int main otwórz nawias okrągły zamknij nawias okrągły. Linia 6. otwórz nawias klamrowy. Linia 7. int MetodaSzyfrowania średnik. Linia 8. bool CzySzyfrujemy średnik. Linia 10. while otwórz nawias okrągły true zamknij nawias okrągły. Linia 11. otwórz nawias klamrowy. Linia 12. MetodaSzyfrowania znak równości StworzMenu otwórz nawias okrągły zamknij nawias okrągły średnik. Linia 13. CzySzyfrujemy znak równości SzyfrDeszyfr otwórz nawias okrągły zamknij nawias okrągły średnik. Linia 15. string wiadomosc średnik. Linia 17. cout otwórz nawias ostrokątny otwórz nawias ostrokątny cudzysłów Podaj wiadomosc do cudzysłów średnik. Linia 19. if otwórz nawias okrągły CzySzyfrujemy znak równości znak równości true zamknij nawias okrągły. Linia 20. cout otwórz nawias ostrokątny otwórz nawias ostrokątny cudzysłów zaszyfrowania dwukropek cudzysłów średnik. Linia 21. else. Linia 22. cout otwórz nawias ostrokątny otwórz nawias ostrokątny cudzysłów odszyfrowania dwukropek cudzysłów średnik. Linia 24. cin zamknij nawias ostrokątny zamknij nawias ostrokątny wiadomosc średnik. Linia 25. zamknij nawias klamrowy. Linia 27. zamknij nawias klamrowy.

Krok 10

Wyświetlamy prośbę o podanie klucza szyfrującego.

Linia 1. kratka include otwórz nawias ostrokątny iostream zamknij nawias ostrokątny. Linia 3. using namespace std średnik. Linia 5. int main otwórz nawias okrągły zamknij nawias okrągły. Linia 6. otwórz nawias klamrowy. Linia 7. int MetodaSzyfrowania średnik. Linia 8. bool CzySzyfrujemy średnik. Linia 10. while otwórz nawias okrągły true zamknij nawias okrągły. Linia 11. otwórz nawias klamrowy. Linia 12. MetodaSzyfrowania znak równości StworzMenu otwórz nawias okrągły zamknij nawias okrągły średnik. Linia 13. CzySzyfrujemy znak równości SzyfrDeszyfr otwórz nawias okrągły zamknij nawias okrągły średnik. Linia 15. string wiadomosc średnik. Linia 17. cout otwórz nawias ostrokątny otwórz nawias ostrokątny cudzysłów Podaj wiadomosc do cudzysłów średnik. Linia 19. if otwórz nawias okrągły CzySzyfrujemy znak równości znak równości true zamknij nawias okrągły. Linia 20. cout otwórz nawias ostrokątny otwórz nawias ostrokątny cudzysłów zaszyfrowania dwukropek cudzysłów średnik. Linia 21. else. Linia 22. cout otwórz nawias ostrokątny otwórz nawias ostrokątny cudzysłów odszyfrowania dwukropek cudzysłów średnik. Linia 24. cin zamknij nawias ostrokątny zamknij nawias ostrokątny wiadomosc średnik. Linia 26. cout otwórz nawias ostrokątny otwórz nawias ostrokątny cudzysłów Podaj klucz szyfrujacy dwukropek cudzysłów średnik. Linia 27. zamknij nawias klamrowy. Linia 28. zamknij nawias klamrowy.

Krok 11

Wykorzystujemy przełącznik switch i sprawdzamy za jego pomocą, którą metodę szyfrowania wybrał użytkownik. W naszym przypadku wystarczyłaby instrukcja if, jednak wykorzystujemy przełącznik switch, by ułatwić przyszłą rozbudowę programu.

Linia 1. kratka include otwórz nawias ostrokątny iostream zamknij nawias ostrokątny. Linia 3. using namespace std średnik. Linia 5. int main otwórz nawias okrągły zamknij nawias okrągły. Linia 6. otwórz nawias klamrowy. Linia 7. int MetodaSzyfrowania średnik. Linia 8. bool CzySzyfrujemy średnik. Linia 10. while otwórz nawias okrągły true zamknij nawias okrągły. Linia 11. otwórz nawias klamrowy. Linia 12. MetodaSzyfrowania znak równości StworzMenu otwórz nawias okrągły zamknij nawias okrągły średnik. Linia 13. CzySzyfrujemy znak równości SzyfrDeszyfr otwórz nawias okrągły zamknij nawias okrągły średnik. Linia 15. string wiadomosc średnik. Linia 17. cout otwórz nawias ostrokątny otwórz nawias ostrokątny cudzysłów Podaj wiadomosc do cudzysłów średnik. Linia 19. if otwórz nawias okrągły CzySzyfrujemy znak równości znak równości true zamknij nawias okrągły. Linia 20. cout otwórz nawias ostrokątny otwórz nawias ostrokątny cudzysłów zaszyfrowania dwukropek cudzysłów średnik. Linia 21. else. Linia 22. cout otwórz nawias ostrokątny otwórz nawias ostrokątny cudzysłów odszyfrowania dwukropek cudzysłów średnik. Linia 24. cin zamknij nawias ostrokątny zamknij nawias ostrokątny wiadomosc średnik. Linia 26. cout otwórz nawias ostrokątny otwórz nawias ostrokątny cudzysłów Podaj klucz szyfrujacy dwukropek cudzysłów średnik. Linia 28. switch otwórz nawias okrągły MetodaSzyfrowania zamknij nawias okrągły. Linia 29. otwórz nawias klamrowy. Linia 30. case 1 dwukropek. Linia 31. case 2 dwukropek. Linia 32. zamknij nawias klamrowy. Linia 33. zamknij nawias klamrowy. Linia 34. zamknij nawias klamrowy.

Krok 12

Zapisujemy odpowiednie instrukcje dla przypadku pierwszego.

Linia 1. kratka include otwórz nawias ostrokątny iostream zamknij nawias ostrokątny. Linia 3. using namespace std średnik. Linia 5. int main otwórz nawias okrągły zamknij nawias okrągły. Linia 6. otwórz nawias klamrowy. Linia 7. int MetodaSzyfrowania średnik. Linia 8. bool CzySzyfrujemy średnik. Linia 10. while otwórz nawias okrągły true zamknij nawias okrągły. Linia 11. otwórz nawias klamrowy. Linia 12. MetodaSzyfrowania znak równości StworzMenu otwórz nawias okrągły zamknij nawias okrągły średnik. Linia 13. CzySzyfrujemy znak równości SzyfrDeszyfr otwórz nawias okrągły zamknij nawias okrągły średnik. Linia 15. string wiadomosc średnik. Linia 17. cout otwórz nawias ostrokątny otwórz nawias ostrokątny cudzysłów Podaj wiadomosc do cudzysłów średnik. Linia 19. if otwórz nawias okrągły CzySzyfrujemy znak równości znak równości true zamknij nawias okrągły. Linia 20. cout otwórz nawias ostrokątny otwórz nawias ostrokątny cudzysłów zaszyfrowania dwukropek cudzysłów średnik. Linia 21. else. Linia 22. cout otwórz nawias ostrokątny otwórz nawias ostrokątny cudzysłów odszyfrowania dwukropek cudzysłów średnik. Linia 24. cin zamknij nawias ostrokątny zamknij nawias ostrokątny wiadomosc średnik. Linia 26. cout otwórz nawias ostrokątny otwórz nawias ostrokątny cudzysłów Podaj klucz szyfrujacy dwukropek cudzysłów średnik. Linia 28. switch otwórz nawias okrągły MetodaSzyfrowania zamknij nawias okrągły. Linia 29. otwórz nawias klamrowy. Linia 30. case 1 dwukropek. Linia 31. int KluczCezar średnik. Linia 32. cin zamknij nawias ostrokątny zamknij nawias ostrokątny KluczCezar średnik. Linia 33. if otwórz nawias okrągły CzySzyfrujemy znak równości znak równości true zamknij nawias okrągły. Linia 34. cout otwórz nawias ostrokątny otwórz nawias ostrokątny cudzysłów Zaszyfrowana wiadomosc dwukropek cudzysłów otwórz nawias ostrokątny otwórz nawias ostrokątny SzyfrCezar otwórz nawias okrągły wiadomosc przecinek KluczCezar przecinek 26 zamknij nawias okrągły otwórz nawias ostrokątny otwórz nawias ostrokątny endl średnik. Linia 35. else. Linia 36. cout otwórz nawias ostrokątny otwórz nawias ostrokątny cudzysłów Odszyfrowana wiadomosc dwukropek cudzysłów otwórz nawias ostrokątny otwórz nawias ostrokątny DeszyfrCezar otwórz nawias okrągły wiadomosc przecinek KluczCezar przecinek 26 zamknij nawias okrągły otwórz nawias ostrokątny otwórz nawias ostrokątny endl średnik. Linia 37. break średnik. Linia 38. case 2 dwukropek. Linia 39. zamknij nawias klamrowy. Linia 40. zamknij nawias klamrowy. Linia 41. zamknij nawias klamrowy.
  • Pierwsza z instrukcji to deklaracja odpowiedniej zmiennej do przechowania klucza szyfrującego. Jest to zmienna typu int, ponieważ w szyfrze Cezara możemy przesuwać tylko o wartości w postaci liczb całkowitych.

  • Wczytujemy klucz szyfrujący do naszej zmiennej.

  • Sprawdzamy, czy użytkownik wybrał opcję szyfrowania, czy deszyfrowania. Jeśli zmienna CzySzyfrujemy ma wartość prawda, to wykonujemy szyfrowanie podanej wiadomości, wykorzystując wczytany przed chwilą klucz szyfrowania.

  • Jeśli użytkownik wybrał opcję szyfrowania, wyświetlamy odpowiedni komunikat wraz z zaszyfrowaną wiadomością, którą uzyskujemy z funkcji SzyfrCezar(). Funkcja ta jest dokładnie tą samą, która została opisana we wcześniejszych e‑materiałach.

  • Jeśli użytkownik wybrał opcję deszyfrowania, wyświetlamy odpowiedni komunikat wraz z odszyfrowaną wiadomością, którą uzyskujemy z funkcji DeszyfrCezar(). Funkcja ta jest dokładnie tą samą, która została opisana we wcześniejszych e‑materiałach.

  • Wykorzystujemy instrukcję break, by nasz program po wykonaniu instrukcji dla przypadku pierwszego nie zaczął wykonywać instrukcji dla przypadku drugiego.

Krok 13

Zapisujemy odpowiednie instrukcje dla przypadku drugiego.

Linia 1. kratka include otwórz nawias ostrokątny iostream zamknij nawias ostrokątny. Linia 3. using namespace std średnik. Linia 5. int main otwórz nawias okrągły zamknij nawias okrągły. Linia 6. otwórz nawias klamrowy. Linia 7. int MetodaSzyfrowania średnik. Linia 8. bool CzySzyfrujemy średnik. Linia 10. while otwórz nawias okrągły true zamknij nawias okrągły. Linia 11. otwórz nawias klamrowy. Linia 12. MetodaSzyfrowania znak równości StworzMenu otwórz nawias okrągły zamknij nawias okrągły średnik. Linia 13. CzySzyfrujemy znak równości SzyfrDeszyfr otwórz nawias okrągły zamknij nawias okrągły średnik. Linia 15. string wiadomosc średnik. Linia 17. cout otwórz nawias ostrokątny otwórz nawias ostrokątny cudzysłów Podaj wiadomosc do cudzysłów średnik. Linia 19. if otwórz nawias okrągły CzySzyfrujemy znak równości znak równości true zamknij nawias okrągły. Linia 20. cout otwórz nawias ostrokątny otwórz nawias ostrokątny cudzysłów zaszyfrowania dwukropek cudzysłów średnik. Linia 21. else. Linia 22. cout otwórz nawias ostrokątny otwórz nawias ostrokątny cudzysłów odszyfrowania dwukropek cudzysłów średnik. Linia 24. cin zamknij nawias ostrokątny zamknij nawias ostrokątny wiadomosc średnik. Linia 26. cout otwórz nawias ostrokątny otwórz nawias ostrokątny cudzysłów Podaj klucz szyfrujacy dwukropek cudzysłów średnik. Linia 28. switch otwórz nawias okrągły MetodaSzyfrowania zamknij nawias okrągły. Linia 29. otwórz nawias klamrowy. Linia 30. case 1 dwukropek. Linia 31. int KluczCezar średnik. Linia 32. cin zamknij nawias ostrokątny zamknij nawias ostrokątny KluczCezar średnik. Linia 33. if otwórz nawias okrągły CzySzyfrujemy znak równości znak równości true zamknij nawias okrągły. Linia 34. cout otwórz nawias ostrokątny otwórz nawias ostrokątny cudzysłów Zaszyfrowana wiadomosc dwukropek cudzysłów otwórz nawias ostrokątny otwórz nawias ostrokątny SzyfrCezar otwórz nawias okrągły wiadomosc przecinek KluczCezar przecinek 26 zamknij nawias okrągły otwórz nawias ostrokątny otwórz nawias ostrokątny endl średnik. Linia 35. else. Linia 36. cout otwórz nawias ostrokątny otwórz nawias ostrokątny cudzysłów Odszyfrowana wiadomosc dwukropek cudzysłów otwórz nawias ostrokątny otwórz nawias ostrokątny DeszyfrCezar otwórz nawias okrągły wiadomosc przecinek KluczCezar przecinek 26 zamknij nawias okrągły otwórz nawias ostrokątny otwórz nawias ostrokątny endl średnik. Linia 37. break średnik. Linia 38. case 2 dwukropek. Linia 39. char tabela otwórz nawias kwadratowy 26 zamknij nawias kwadratowy otwórz nawias kwadratowy 26 zamknij nawias kwadratowy średnik. Linia 40. wypelnij otwórz nawias okrągły tabela zamknij nawias okrągły średnik. Linia 41. string KluczVigenere średnik. Linia 42. cin zamknij nawias ostrokątny zamknij nawias ostrokątny KluczVigenere średnik. Linia 43. if otwórz nawias okrągły CzySzyfrujemy znak równości znak równości true zamknij nawias okrągły. Linia 44. cout otwórz nawias ostrokątny otwórz nawias ostrokątny cudzysłów Zaszyfrowana wiadomosc dwukropek cudzysłów otwórz nawias ostrokątny otwórz nawias ostrokątny SzyfrVigenere otwórz nawias okrągły wiadomosc przecinek KluczVigenere przecinek tabela zamknij nawias okrągły otwórz nawias ostrokątny otwórz nawias ostrokątny endl średnik. Linia 45. else. Linia 46. cout otwórz nawias ostrokątny otwórz nawias ostrokątny cudzysłów Odszyfrowana wiadomosc dwukropek cudzysłów otwórz nawias ostrokątny otwórz nawias ostrokątny DeszyfrVigenere otwórz nawias okrągły wiadomosc przecinek KluczVigenere przecinek tabela zamknij nawias okrągły otwórz nawias ostrokątny otwórz nawias ostrokątny endl średnik. Linia 47. break średnik. Linia 48. zamknij nawias klamrowy. Linia 49. zamknij nawias klamrowy. Linia 50. zamknij nawias klamrowy.
  • Deklarujemy tablicę 26 na 26 znaków potrzebną do szyfrowania Vigenère'a.

  • Wypełniamy zadeklarowaną przed chwilą tablicę funkcją wypelnij.

  • Deklarujemy łańcuch znaków KluczVigenere, w którym będziemy przechowywać klucz szyfrujący.

  • Sprawdzamy, czy użytkownik wybrał opcję szyfrowania, czy deszyfrowania. Jeśli zmienna CzySzyfrujemy ma wartość prawda, to wykonujemy szyfrowanie podanej wiadomości, wykorzystując wczytany przed chwilą klucz szyfrowania.

  • Jeśli użytkownik wybrał opcję szyfrowania, wyświetlamy odpowiedni komunikat wraz z zaszyfrowaną wiadomością, którą uzyskujemy z funkcji SzyfrVigenere(). Funkcja ta jest dokładnie tą samą, która została opisana we wcześniejszych e‑materiałach.

  • Jeśli użytkownik wybrał opcję deszyfrowania, wyświetlamy odpowiedni komunikat, wraz z odszyfrowaną wiadomością, którą uzyskujemy z funkcji DeszyfrVigenere(). Funkcja ta jest dokładnie tą samą, która została opisana we wcześniejszych e‑materiałach.

  • Wykorzystujemy instrukcję break, by nasz program po wykonaniu instrukcji dla przypadku pierwszego nie zaczął wykonywać instrukcji dla przypadku drugiego.

Krok 14

Po wyświetleniu wiadomości czekamy na dowolny znak od użytkownika przy użyciu polecenia system("pause"), a następnie czyścimy ekran konsoli, korzystając z polecenia system("cls").

Linia 1. kratka include otwórz nawias ostrokątny iostream zamknij nawias ostrokątny. Linia 3. using namespace std średnik. Linia 5. int main otwórz nawias okrągły zamknij nawias okrągły. Linia 6. otwórz nawias klamrowy. Linia 7. int MetodaSzyfrowania średnik. Linia 8. bool CzySzyfrujemy średnik. Linia 10. while otwórz nawias okrągły true zamknij nawias okrągły. Linia 11. otwórz nawias klamrowy. Linia 12. MetodaSzyfrowania znak równości StworzMenu otwórz nawias okrągły zamknij nawias okrągły średnik. Linia 13. CzySzyfrujemy znak równości SzyfrDeszyfr otwórz nawias okrągły zamknij nawias okrągły średnik. Linia 15. string wiadomosc średnik. Linia 17. cout otwórz nawias ostrokątny otwórz nawias ostrokątny cudzysłów Podaj wiadomosc do cudzysłów średnik. Linia 19. if otwórz nawias okrągły CzySzyfrujemy znak równości znak równości true zamknij nawias okrągły. Linia 20. cout otwórz nawias ostrokątny otwórz nawias ostrokątny cudzysłów zaszyfrowania dwukropek cudzysłów średnik. Linia 21. else. Linia 22. cout otwórz nawias ostrokątny otwórz nawias ostrokątny cudzysłów odszyfrowania dwukropek cudzysłów średnik. Linia 24. cin zamknij nawias ostrokątny zamknij nawias ostrokątny wiadomosc średnik. Linia 26. cout otwórz nawias ostrokątny otwórz nawias ostrokątny cudzysłów Podaj klucz szyfrujacy dwukropek cudzysłów średnik. Linia 28. switch otwórz nawias okrągły MetodaSzyfrowania zamknij nawias okrągły. Linia 29. otwórz nawias klamrowy. Linia 30. case 1 dwukropek. Linia 31. int KluczCezar średnik. Linia 32. cin zamknij nawias ostrokątny zamknij nawias ostrokątny KluczCezar średnik. Linia 33. if otwórz nawias okrągły CzySzyfrujemy znak równości znak równości true zamknij nawias okrągły. Linia 34. cout otwórz nawias ostrokątny otwórz nawias ostrokątny cudzysłów Zaszyfrowana wiadomosc dwukropek cudzysłów otwórz nawias ostrokątny otwórz nawias ostrokątny SzyfrCezar otwórz nawias okrągły wiadomosc przecinek KluczCezar przecinek 26 zamknij nawias okrągły otwórz nawias ostrokątny otwórz nawias ostrokątny endl średnik. Linia 35. else. Linia 36. cout otwórz nawias ostrokątny otwórz nawias ostrokątny cudzysłów Odszyfrowana wiadomosc dwukropek cudzysłów otwórz nawias ostrokątny otwórz nawias ostrokątny DeszyfrCezar otwórz nawias okrągły wiadomosc przecinek KluczCezar przecinek 26 zamknij nawias okrągły otwórz nawias ostrokątny otwórz nawias ostrokątny endl średnik. Linia 37. break średnik. Linia 38. case 2 dwukropek. Linia 39. char tabela otwórz nawias kwadratowy 26 zamknij nawias kwadratowy otwórz nawias kwadratowy 26 zamknij nawias kwadratowy średnik. Linia 40. wypelnij otwórz nawias okrągły tabela zamknij nawias okrągły średnik. Linia 41. string KluczVigenere średnik. Linia 42. cin zamknij nawias ostrokątny zamknij nawias ostrokątny KluczVigenere średnik. Linia 43. if otwórz nawias okrągły CzySzyfrujemy znak równości znak równości true zamknij nawias okrągły. Linia 44. cout otwórz nawias ostrokątny otwórz nawias ostrokątny cudzysłów Zaszyfrowana wiadomosc dwukropek cudzysłów otwórz nawias ostrokątny otwórz nawias ostrokątny SzyfrVigenere otwórz nawias okrągły wiadomosc przecinek KluczVigenere przecinek tabela zamknij nawias okrągły otwórz nawias ostrokątny otwórz nawias ostrokątny endl średnik. Linia 45. else. Linia 46. cout otwórz nawias ostrokątny otwórz nawias ostrokątny cudzysłów Odszyfrowana wiadomosc dwukropek cudzysłów otwórz nawias ostrokątny otwórz nawias ostrokątny DeszyfrVigenere otwórz nawias okrągły wiadomosc przecinek KluczVigenere przecinek tabela zamknij nawias okrągły otwórz nawias ostrokątny otwórz nawias ostrokątny endl średnik. Linia 47. break średnik. Linia 48. zamknij nawias klamrowy. Linia 49. system otwórz nawias okrągły cudzysłów pause cudzysłów zamknij nawias okrągły średnik. Linia 50. system otwórz nawias okrągły cudzysłów cls cudzysłów zamknij nawias okrągły średnik. Linia 51. zamknij nawias klamrowy. Linia 52. zamknij nawias klamrowy.

Słownik

instrukcja exit()
instrukcja exit()

instrukcja, która wymusza zamknięcie programu z kodem umieszczonym w nawiasach okrągłych; kod 0 oznacza EXIT_SUCCESS

instrukcja system("cls")
instrukcja system("cls")

instrukcja, która czyści okno konsoli z wyświetlonych dotychczas komunikatów

instrukcja system("pause")
instrukcja system("pause")

instrukcja, która zatrzymuje działanie programu i czeka do momentu naciśnięcia dowolnego klawisza