Wróć do informacji o e-podręczniku Wydrukuj Pobierz materiał do PDF Pobierz materiał do EPUB Pobierz materiał do MOBI Zaloguj się, aby dodać do ulubionych Zaloguj się, aby skopiować i edytować materiał Zaloguj się, aby udostępnić materiał Zaloguj się, aby dodać całą stronę do teczki
Problem 1

Zaimplementuj szyfr Playfair. Przetestuj jego działanie dla klucza JESIEŃ oraz wiadomości INSTRUMENT. Upewnij się, że program poprawnie deszyfruje szyfrogram.

Specyfikacja:

Dane:

  • klucz – łańcuch znaków

  • wiadomosc – łańcuch znaków

Wynik:

Program na wyjściu standardowym zwróci zaszyfrowany za pomocą klucza klucz łańcuch znaków wiadomosc. Następnie zwróci ten sam łańcuch znaków po deszyfrowaniu.

R14blzHpVXHEs
Wybierz jedno nowe słowo poznane podczas dzisiejszej lekcji i ułóż z nim zdanie.
Polecenie 1

Porównaj swoje rozwiązanie z przedstawionym w filmie.

RpJC1dfVOUgN4
Film nawiązujący do treści materiału - dotyczy szyfru Playfair.

Kod programu zaprezentowanego w filmie:

RyevfXfQLk74B

Przycisk służący do pobrania kodu źródłowego programu zaprezentowanego w filmie.

Źródło: Contentplus.pl Sp. z o.o., licencja: CC BY-SA 3.0.
Plik CPP o rozmiarze 5.29 KB w języku polskim

Podsumowanie

Szyfrowanie par

Dla każdej pary liter w tekście, jaki musimy zaszyfrować, należy określić ich względne położenie. Jeżeli tekst ma nieparzystą liczbę liter, dodajmy na jego końcu literę Z – jest to często stosowana metoda.

Interesują nas trzy możliwe sytuacje:

  • litery znajdują się w tym samym wierszu – wtedy przesuwamy je o 1 jednostkę w prawo, jeżeli to potrzebne, wracając do początku wiersza (nie zmieniając kolumny!). Przykładowo, dla pary MB dla naszego klucza wynikiem jest BO;

  • litery znajdują się w tej samej kolumnie – wtedy przesuwamy je o 1 jednostkę w dół, jeżeli to potrzebne, wracając do początku kolumny (nie zmieniając wiersza!). Przykładowo, dla pary PX dla naszego klucza wynikiem jest XR;

  • litery znajdują się na różnych wierszach i kolumnach – w tym przypadku traktujemy te litery jako końce przekątnej prostokąta. Wierzchołki drugiej przekątnej tego prostokąta będą zaszyfrowaną parą. Przykładowo, dla pary SL dla naszego klucza wynikiem jest JY.

Tworzenie klucza

Zacznijmy od napisania funkcji, która stworzy klucz na podstawie pewnego słowa bazowego. Będzie ona przyjmowała i zwracała po jednym argumencie typu string – odpowiednio słowo bazowe oraz gotowy klucz. Potraktujemy tabelę 5 na 5 jako jeden ciąg znaków.

Ważne!

W programie będziemy używali dwóch bibliotek standardowych: iostreamstring – pamiętajmy o ich dołączeniu na początku kodu. Nie zapominajmy również o przestrzeni nazw using namespace std;.

Na początek zapiszmy funkcję:

Linia 1. prawy ukośnik prawy ukośnik Funkcja do stworzenia tabeli na podstawie podanego klucza. Linia 2. string przetwarzajKlucz otwórz nawias okrągły string klucz zamknij nawias okrągły otwórz nawias klamrowy. Linia 4. zamknij nawias klamrowy.

Stwórzmy alfabet, którego będziemy używali w kluczu. Będą to wielkie litery alfabetu łacińskiego z pominięciem litery Q.

Linia 1. prawy ukośnik prawy ukośnik Funkcja do stworzenia tabeli na podstawie podanego klucza. Linia 2. string przetwarzajKlucz otwórz nawias okrągły string klucz zamknij nawias okrągły otwórz nawias klamrowy. Linia 3. prawy ukośnik asterysk. Linia 4. Stwórzmy używany przez nas alfabet średnik duże litery. Linia 5. alfabetu łacińskiego przecinek bez litery Q. Linia 6. asterysk prawy ukośnik. Linia 7. string alfabet średnik. Linia 8. for otwórz nawias okrągły char i znak równości apostrof A apostrof średnik i otwórz nawias ostrokątny znak równości apostrof Z apostrof średnik i plus plus zamknij nawias okrągły. Linia 9. if otwórz nawias okrągły i wykrzyknik znak równości apostrof Q apostrof zamknij nawias okrągły. Linia 10. alfabet plus znak równości i średnik. Linia 12. zamknij nawias klamrowy.

Upewnijmy się, że wszystkie litery słowa bazowego są wielkimi literami. Skorzystamy w tym celu z kolejnej pętli.

Linia 1. prawy ukośnik prawy ukośnik Funkcja do stworzenia tabeli na podstawie podanego klucza. Linia 2. string przetwarzajKlucz otwórz nawias okrągły string klucz zamknij nawias okrągły otwórz nawias klamrowy. Linia 3. prawy ukośnik asterysk. Linia 4. Stwórzmy używany przez nas alfabet średnik duże litery. Linia 5. alfabetu łacińskiego przecinek bez litery Q. Linia 6. asterysk prawy ukośnik. Linia 7. string alfabet średnik. Linia 8. for otwórz nawias okrągły char i znak równości apostrof A apostrof średnik i otwórz nawias ostrokątny znak równości apostrof Z apostrof średnik i plus plus zamknij nawias okrągły. Linia 9. if otwórz nawias okrągły i wykrzyknik znak równości apostrof Q apostrof zamknij nawias okrągły. Linia 10. alfabet plus znak równości i średnik. Linia 12. for otwórz nawias okrągły auto ampersant x dwukropek klucz zamknij nawias okrągły. Linia 13. x znak równości toupper otwórz nawias okrągły x zamknij nawias okrągły średnik. Linia 14. zamknij nawias klamrowy.

Utwórzmy zmienną, w której będziemy przechowywali wyjściowy klucz. Dodajmy do niego wszystkie znaki – bez powtórzeń – jakie mamy w słowie bazowym.

Linia 1. prawy ukośnik prawy ukośnik Funkcja do stworzenia tabeli na podstawie podanego klucza. Linia 2. string przetwarzajKlucz otwórz nawias okrągły string klucz zamknij nawias okrągły otwórz nawias klamrowy. Linia 3. prawy ukośnik asterysk. Linia 4. Stwórzmy używany przez nas alfabet średnik duże litery. Linia 5. alfabetu łacińskiego przecinek bez litery Q. Linia 6. asterysk prawy ukośnik. Linia 7. string alfabet średnik. Linia 8. for otwórz nawias okrągły char i znak równości apostrof A apostrof średnik i otwórz nawias ostrokątny znak równości apostrof Z apostrof średnik i plus plus zamknij nawias okrągły. Linia 9. if otwórz nawias okrągły i wykrzyknik znak równości apostrof Q apostrof zamknij nawias okrągły. Linia 10. alfabet plus znak równości i średnik. Linia 12. for otwórz nawias okrągły auto ampersant x dwukropek klucz zamknij nawias okrągły. Linia 13. x znak równości toupper otwórz nawias okrągły x zamknij nawias okrągły średnik. Linia 15. string przetwarzanyKlucz średnik. Linia 16. prawy ukośnik asterysk. Linia 17. Dodajmy do klucza wyjściowego wszystkie znaki przecinek. Linia 18. bez powtórzeń przecinek jakie mamy w podanym wyrażeniu. Linia 19. asterysk prawy ukośnik. Linia 20. for otwórz nawias okrągły auto x dwukropek klucz zamknij nawias okrągły. Linia 21. if otwórz nawias okrągły alfabet kropka find otwórz nawias okrągły x zamknij nawias okrągły wykrzyknik znak równości string dwukropek dwukropek npos ampersant ampersant. Linia 22. przetwarzanyKlucz kropka find otwórz nawias okrągły x zamknij nawias okrągły znak równości znak równości string dwukropek dwukropek npos zamknij nawias okrągły. Linia 23. przetwarzanyKlucz plus znak równości x średnik.

Pozostaje tylko dopełnić tabelę pozostałymi literami alfabetu, a następnie zwrócić ostateczny klucz.

Linia 1. prawy ukośnik prawy ukośnik Funkcja do stworzenia tabeli na podstawie podanego klucza. Linia 2. string przetwarzajKlucz otwórz nawias okrągły string klucz zamknij nawias okrągły otwórz nawias klamrowy. Linia 3. prawy ukośnik asterysk. Linia 4. Stwórzmy używany przez nas alfabet średnik duże litery. Linia 5. alfabetu łacińskiego przecinek bez litery Q. Linia 6. asterysk prawy ukośnik. Linia 7. string alfabet średnik. Linia 8. for otwórz nawias okrągły char i znak równości apostrof A apostrof średnik i otwórz nawias ostrokątny znak równości apostrof Z apostrof średnik i plus plus zamknij nawias okrągły. Linia 9. if otwórz nawias okrągły i wykrzyknik znak równości apostrof Q apostrof zamknij nawias okrągły. Linia 10. alfabet plus znak równości i średnik. Linia 12. for otwórz nawias okrągły auto ampersant x dwukropek klucz zamknij nawias okrągły. Linia 13. x znak równości toupper otwórz nawias okrągły x zamknij nawias okrągły średnik. Linia 15. string przetwarzanyKlucz średnik. Linia 16. prawy ukośnik asterysk. Linia 17. Dodajmy do klucza wyjściowego wszystkie znaki przecinek. Linia 18. bez powtórzeń przecinek jakie mamy w podanym wyrażeniu. Linia 19. asterysk prawy ukośnik. Linia 20. for otwórz nawias okrągły auto x dwukropek klucz zamknij nawias okrągły. Linia 21. if otwórz nawias okrągły alfabet kropka find otwórz nawias okrągły x zamknij nawias okrągły wykrzyknik znak równości string dwukropek dwukropek npos ampersant ampersant. Linia 22. przetwarzanyKlucz kropka find otwórz nawias okrągły x zamknij nawias okrągły znak równości znak równości string dwukropek dwukropek npos zamknij nawias okrągły. Linia 23. przetwarzanyKlucz plus znak równości x średnik. Linia 25. prawy ukośnik prawy ukośnik Teraz dopełnijmy klucz pozostałymi literami alfabetu. Linia 26. for otwórz nawias okrągły auto x dwukropek alfabet zamknij nawias okrągły. Linia 27. if otwórz nawias okrągły przetwarzanyKlucz kropka find otwórz nawias okrągły x zamknij nawias okrągły znak równości znak równości string dwukropek dwukropek npos zamknij nawias okrągły. Linia 28. przetwarzanyKlucz plus znak równości x średnik. Linia 30. return przetwarzanyKlucz średnik. Linia 31. zamknij nawias klamrowy.

Funkcja szyfrująca

Napiszemy funkcję, która będzie implementowała sam algorytm szyfrowania. Będzie ona przyjmowała tekst do zaszyfrowania oraz klucz, a zwracała zaszyfrowany tekst – wszystkie wartości są oczywiście typu string. Po upewnieniu się, że tekst ma parzystą liczbę znaków, przechodzimy po wszystkich parach liter i zamieniamy je na odpowiednie wartości z klucza, korzystając z omówionych wcześniej zasad.

Zacznijmy od stworzenia funkcji kodującej podany tekst za pomocą klucza.

Linia 1. prawy ukośnik prawy ukośnik Funkcja do zakodowania wiadomości za pomocą klucza. Linia 2. string szyfruj otwórz nawias okrągły string wiadomosc przecinek const string klucz zamknij nawias okrągły otwórz nawias klamrowy. Linia 4. zamknij nawias klamrowy.

Jeżeli tekst ma nieparzystą liczbę znaków, dodajmy na końcu literę Z. Następnie stwórzmy pętlę, która przejdzie po wszystkich parach znaków w tekście.

Linia 1. prawy ukośnik prawy ukośnik Funkcja do zakodowania wiadomości za pomocą klucza. Linia 2. string szyfruj otwórz nawias okrągły string wiadomosc przecinek const string klucz zamknij nawias okrągły otwórz nawias klamrowy otwórz nawias klamrowy. Linia 3. prawy ukośnik asterysk. Linia 4. Upewnijmy się przecinek że tekst do zaszyfrowania. Linia 5. ma parzystą liczbę znaków. Linia 6. asterysk prawy ukośnik. Linia 7. if otwórz nawias okrągły wiadomosc kropka length otwórz nawias okrągły zamknij nawias okrągły procent 2 zamknij nawias okrągły otwórz nawias klamrowy. Linia 8. wiadomosc plus znak równości apostrof Z apostrof średnik. Linia 9. zamknij nawias klamrowy. Linia 11. prawy ukośnik prawy ukośnik Interesują nas pary liczb przecinek dlatego i plus znak równości 2. Linia 12. for otwórz nawias okrągły unsigned int i znak równości 0 średnik i otwórz nawias ostrokątny wiadomosc kropka length otwórz nawias okrągły zamknij nawias okrągły średnik i plus znak równości 2 zamknij nawias okrągły otwórz nawias klamrowy. Linia 14. zamknij nawias klamrowy. Linia 15. zamknij nawias klamrowy.

Znajdźmy pozycje obu liter z pary w kluczu.

Linia 1. prawy ukośnik prawy ukośnik Funkcja do zakodowania wiadomości za pomocą klucza. Linia 2. string szyfruj otwórz nawias okrągły string wiadomosc przecinek const string klucz zamknij nawias okrągły otwórz nawias klamrowy otwórz nawias klamrowy. Linia 3. prawy ukośnik asterysk. Linia 4. Upewnijmy się przecinek że tekst do zaszyfrowania. Linia 5. ma parzystą liczbę znaków. Linia 6. asterysk prawy ukośnik. Linia 7. if otwórz nawias okrągły wiadomosc kropka length otwórz nawias okrągły zamknij nawias okrągły procent 2 zamknij nawias okrągły otwórz nawias klamrowy. Linia 8. wiadomosc plus znak równości apostrof Z apostrof średnik. Linia 9. zamknij nawias klamrowy. Linia 11. prawy ukośnik prawy ukośnik Interesują nas pary liczb przecinek dlatego i plus znak równości 2. Linia 12. for otwórz nawias okrągły unsigned int i znak równości 0 średnik i otwórz nawias ostrokątny wiadomosc kropka length otwórz nawias okrągły zamknij nawias okrągły średnik i plus znak równości 2 zamknij nawias okrągły otwórz nawias klamrowy. Linia 13. prawy ukośnik asterysk. Linia 14. Znajdźmy wiersze i kolumny rozpatrywanych. Linia 15. liter w naszym kluczu. Linia 16. asterysk prawy ukośnik. Linia 17. int row otwórz nawias kwadratowy 2 zamknij nawias kwadratowy znak równości otwórz nawias klamrowy. Linia 18. klucz kropka find otwórz nawias okrągły wiadomosc otwórz nawias kwadratowy i zamknij nawias kwadratowy zamknij nawias okrągły prawy ukośnik 5 przecinek. Linia 19. klucz kropka find otwórz nawias okrągły wiadomosc otwórz nawias kwadratowy i plus 1 zamknij nawias kwadratowy zamknij nawias okrągły prawy ukośnik 5. Linia 20. zamknij nawias klamrowy średnik. Linia 21. int col otwórz nawias kwadratowy 2 zamknij nawias kwadratowy znak równości otwórz nawias klamrowy. Linia 22. klucz kropka find otwórz nawias okrągły wiadomosc otwórz nawias kwadratowy i zamknij nawias kwadratowy zamknij nawias okrągły procent 5 przecinek. Linia 23. klucz kropka find otwórz nawias okrągły wiadomosc otwórz nawias kwadratowy i plus 1 zamknij nawias kwadratowy zamknij nawias okrągły procent 5. Linia 24. zamknij nawias klamrowy średnik. Linia 25. zamknij nawias klamrowy. Linia 26. zamknij nawias klamrowy.

Teraz wystarczy zapisać za pomocą kodu omówione wcześniej zasady zamieniania znaków. Na koniec funkcji zwracamy zaszyfrowany tekst.

Linia 1. prawy ukośnik prawy ukośnik Funkcja do zakodowania wiadomości za pomocą klucza. Linia 2. string szyfruj otwórz nawias okrągły string wiadomosc przecinek const string klucz zamknij nawias okrągły otwórz nawias klamrowy otwórz nawias klamrowy. Linia 3. prawy ukośnik asterysk. Linia 4. Upewnijmy się przecinek że tekst do zaszyfrowania. Linia 5. ma parzystą liczbę znaków. Linia 6. asterysk prawy ukośnik. Linia 7. if otwórz nawias okrągły wiadomosc kropka length otwórz nawias okrągły zamknij nawias okrągły procent 2 zamknij nawias okrągły otwórz nawias klamrowy. Linia 8. wiadomosc plus znak równości apostrof Z apostrof średnik. Linia 9. zamknij nawias klamrowy. Linia 11. prawy ukośnik prawy ukośnik Interesują nas pary liczb przecinek dlatego i plus znak równości 2. Linia 12. for otwórz nawias okrągły unsigned int i znak równości 0 średnik i otwórz nawias ostrokątny wiadomosc kropka length otwórz nawias okrągły zamknij nawias okrągły średnik i plus znak równości 2 zamknij nawias okrągły otwórz nawias klamrowy. Linia 13. prawy ukośnik asterysk. Linia 14. Znajdźmy wiersze i kolumny rozpatrywanych. Linia 15. liter w naszym kluczu. Linia 16. asterysk prawy ukośnik. Linia 17. int row otwórz nawias kwadratowy 2 zamknij nawias kwadratowy znak równości otwórz nawias klamrowy. Linia 18. klucz kropka find otwórz nawias okrągły wiadomosc otwórz nawias kwadratowy i zamknij nawias kwadratowy zamknij nawias okrągły prawy ukośnik 5 przecinek. Linia 19. klucz kropka find otwórz nawias okrągły wiadomosc otwórz nawias kwadratowy i plus 1 zamknij nawias kwadratowy zamknij nawias okrągły prawy ukośnik 5. Linia 20. zamknij nawias klamrowy średnik. Linia 21. int col otwórz nawias kwadratowy 2 zamknij nawias kwadratowy znak równości otwórz nawias klamrowy. Linia 22. klucz kropka find otwórz nawias okrągły wiadomosc otwórz nawias kwadratowy i zamknij nawias kwadratowy zamknij nawias okrągły procent 5 przecinek. Linia 23. klucz kropka find otwórz nawias okrągły wiadomosc otwórz nawias kwadratowy i plus 1 zamknij nawias kwadratowy zamknij nawias okrągły procent 5. Linia 24. zamknij nawias klamrowy średnik. Linia 26. prawy ukośnik prawy ukośnik Dla dwóch liter w tej samej kolumnie dwukropek. Linia 27. prawy ukośnik prawy ukośnik przesuwamy je o 1 w dół. Linia 28. if otwórz nawias okrągły col otwórz nawias kwadratowy 0 zamknij nawias kwadratowy znak równości znak równości col otwórz nawias kwadratowy 1 zamknij nawias kwadratowy zamknij nawias okrągły otwórz nawias klamrowy. Linia 29. wiadomosc otwórz nawias kwadratowy i zamknij nawias kwadratowy znak równości klucz otwórz nawias kwadratowy otwórz nawias okrągły otwórz nawias okrągły row otwórz nawias kwadratowy 0 zamknij nawias kwadratowy plus 1 zamknij nawias okrągły procent 5 zamknij nawias okrągły asterysk 5 plus col otwórz nawias kwadratowy 0 zamknij nawias kwadratowy zamknij nawias kwadratowy średnik. Linia 30. wiadomosc otwórz nawias kwadratowy i plus 1 zamknij nawias kwadratowy znak równości klucz otwórz nawias kwadratowy otwórz nawias okrągły otwórz nawias okrągły row otwórz nawias kwadratowy 1 zamknij nawias kwadratowy plus 1 zamknij nawias okrągły procent 5 zamknij nawias okrągły asterysk 5 plus col otwórz nawias kwadratowy 1 zamknij nawias kwadratowy zamknij nawias kwadratowy średnik. Linia 31. zamknij nawias klamrowy. Linia 32. prawy ukośnik prawy ukośnik Dla dwóch liter w tym samym rzędzie dwukropek. Linia 33. prawy ukośnik prawy ukośnik przesuwamy je o 1 w prawo. Linia 34. else if otwórz nawias okrągły row otwórz nawias kwadratowy 0 zamknij nawias kwadratowy znak równości znak równości row otwórz nawias kwadratowy 1 zamknij nawias kwadratowy zamknij nawias okrągły otwórz nawias klamrowy. Linia 35. wiadomosc otwórz nawias kwadratowy i zamknij nawias kwadratowy znak równości klucz otwórz nawias kwadratowy row otwórz nawias kwadratowy 0 zamknij nawias kwadratowy asterysk 5 plus otwórz nawias okrągły col otwórz nawias kwadratowy 0 zamknij nawias kwadratowy plus 1 zamknij nawias okrągły procent 5 zamknij nawias kwadratowy średnik. Linia 36. wiadomosc otwórz nawias kwadratowy i plus 1 zamknij nawias kwadratowy znak równości klucz otwórz nawias kwadratowy row otwórz nawias kwadratowy 1 zamknij nawias kwadratowy asterysk 5 plus otwórz nawias okrągły col otwórz nawias kwadratowy 1 zamknij nawias kwadratowy plus 1 zamknij nawias okrągły procent 5 zamknij nawias kwadratowy średnik. Linia 37. zamknij nawias klamrowy. Linia 38. prawy ukośnik prawy ukośnik Dla liter w różnych rzędach i kolumnach dwukropek. Linia 39. prawy ukośnik prawy ukośnik bierzemy litery cudzysłów na krzyż cudzysłów. Linia 40. else otwórz nawias klamrowy. Linia 41. wiadomosc otwórz nawias kwadratowy i zamknij nawias kwadratowy znak równości klucz otwórz nawias kwadratowy row otwórz nawias kwadratowy 1 zamknij nawias kwadratowy asterysk 5 plus col otwórz nawias kwadratowy 0 zamknij nawias kwadratowy zamknij nawias kwadratowy średnik. Linia 42. wiadomosc otwórz nawias kwadratowy i plus 1 zamknij nawias kwadratowy znak równości klucz otwórz nawias kwadratowy row otwórz nawias kwadratowy 0 zamknij nawias kwadratowy asterysk 5 plus col otwórz nawias kwadratowy 1 zamknij nawias kwadratowy zamknij nawias kwadratowy średnik. Linia 43. zamknij nawias klamrowy. Linia 44. zamknij nawias klamrowy. Linia 45. return wiadomosc średnik. Linia 46. zamknij nawias klamrowy.

Funkcja deszyfrująca

Moglibyśmy stworzyć funkcję deszyfrującą poprzez zmianę kierunku przesuwania wartości w prawo i w dół na odpowiednie przesuwanie ich w lewo i w górę. Jednak w takim wypadku znaczną część kodu skopiowalibyśmy bez potrzeby – jest to przykład negatywnego zjawiska zwanego redundancjąredundancjaredundancją.

Zaletą szyfru Playfair jest, że funkcję deszyfrującą możemy napisać za pomocą funkcji szyfrującej. Wystarczy, że przekażemy klucz odbity symetrycznie względem środka tabeli. Wtedy przesunięcia w prawo i w dół na naszym przekształconym kluczu będą odpowiadały odpowiednio przesunięciom w lewo i w górę.

Właśnie w tym celu przechowujemy klucz w zmiennej typu string. Efekt symetrii uzyskamy poprzez zwykłe podanie klucza od tyłu. Implementacja funkcji jest zatem krótka i zwięzła:

Linia 1. prawy ukośnik prawy ukośnik Funkcja do odkodowania zaszyfrowanej wiadomości. Linia 2. string decode otwórz nawias okrągły string wiadomosc przecinek const string klucz zamknij nawias okrągły otwórz nawias klamrowy. Linia 3. return szyfruj otwórz nawias okrągły wiadomosc przecinek string otwórz nawias okrągły klucz kropka rbegin otwórz nawias okrągły zamknij nawias okrągły przecinek klucz kropka rend otwórz nawias okrągły zamknij nawias okrągły zamknij nawias okrągły zamknij nawias okrągły średnik. Linia 4. zamknij nawias klamrowy.

Wygląda to znacznie czytelniej niż kopiowanie poprzedniego kodu z niewielkimi zmianami.

Przykładowe użycie

Przykładowy kod demonstrujący użycie napisanych przez nas funkcji przedstawia się w następująco:

Linia 1. kratka include otwórz nawias ostrokątny iostream zamknij nawias ostrokątny. Linia 2. kratka include otwórz nawias ostrokątny string zamknij nawias ostrokątny. Linia 4. using namespace std średnik. Linia 6. int main otwórz nawias okrągły zamknij nawias okrągły otwórz nawias klamrowy. Linia 7. cout otwórz nawias ostrokątny otwórz nawias ostrokątny cudzysłów Podaj klucz do szyfru dwukropek cudzysłów otwórz nawias ostrokątny otwórz nawias ostrokątny endl średnik. Linia 8. string klucz średnik. Linia 9. getline otwórz nawias okrągły cin przecinek klucz zamknij nawias okrągły średnik. Linia 10. klucz znak równości przetwarzajKlucz otwórz nawias okrągły klucz zamknij nawias okrągły średnik. Linia 12. cout otwórz nawias ostrokątny otwórz nawias ostrokątny cudzysłów Podaj tekst do zaszyfrowania dwukropek cudzysłów otwórz nawias ostrokątny otwórz nawias ostrokątny endl średnik. Linia 13. string wiadomosc średnik. Linia 14. cin zamknij nawias ostrokątny zamknij nawias ostrokątny wiadomosc średnik. Linia 15. prawy ukośnik prawy ukośnik Zmieńmy wszystkie litery naszej wiadomości na wielkie. Linia 16. for otwórz nawias okrągły auto ampersant x dwukropek wiadomosc zamknij nawias okrągły. Linia 17. x znak równości toupper otwórz nawias okrągły x zamknij nawias okrągły średnik. Linia 19. cout otwórz nawias ostrokątny otwórz nawias ostrokątny cudzysłów Do szyfrowania zostanie uzyty nastepujacy klucz dwukropek cudzysłów otwórz nawias ostrokątny otwórz nawias ostrokątny endl średnik. Linia 20. for otwórz nawias okrągły int i znak równości 0 średnik i otwórz nawias ostrokątny 25 średnik i plus plus zamknij nawias okrągły otwórz nawias klamrowy. Linia 21. cout otwórz nawias ostrokątny otwórz nawias ostrokątny klucz otwórz nawias kwadratowy i zamknij nawias kwadratowy średnik. Linia 22. if otwórz nawias okrągły otwórz nawias okrągły i plus 1 zamknij nawias okrągły procent 5 znak równości znak równości 0 zamknij nawias okrągły. Linia 23. cout otwórz nawias ostrokątny otwórz nawias ostrokątny endl średnik. Linia 24. zamknij nawias klamrowy. Linia 25. cout otwórz nawias ostrokątny otwórz nawias ostrokątny endl średnik. Linia 27. cout otwórz nawias ostrokątny otwórz nawias ostrokątny cudzysłów Zaszyfrowany tekst to dwukropek cudzysłów otwórz nawias ostrokątny otwórz nawias ostrokątny endl średnik. Linia 28. cout otwórz nawias ostrokątny otwórz nawias ostrokątny otwórz nawias okrągły wiadomosc znak równości szyfruj otwórz nawias okrągły wiadomosc przecinek klucz zamknij nawias okrągły zamknij nawias okrągły otwórz nawias ostrokątny otwórz nawias ostrokątny endl otwórz nawias ostrokątny otwórz nawias ostrokątny endl średnik. Linia 30. cout otwórz nawias ostrokątny otwórz nawias ostrokątny cudzysłów Po przetworzeniu przez algorytm odszyfrowania otrzymujemy dwukropek cudzysłów otwórz nawias ostrokątny otwórz nawias ostrokątny endl średnik. Linia 31. cout otwórz nawias ostrokątny otwórz nawias ostrokątny otwórz nawias okrągły decode otwórz nawias okrągły wiadomosc przecinek klucz zamknij nawias okrągły zamknij nawias okrągły otwórz nawias ostrokątny otwórz nawias ostrokątny endl średnik. Linia 33. return 0 średnik. Linia 34. zamknij nawias klamrowy.

Słownik

klucz
klucz

informacja służąca zazwyczaj do szyfrowania i deszyfrowania wiadomości

redundancja
redundancja

inaczej nadmiarowość, czyli sytuacja, gdzie kod jest skopiowany w kilku różnych miejscach, podczas gdy może zostać użyta inna konstrukcja, na przykład funkcja czy pętla

szyfr podstawieniowy poligramowy
szyfr podstawieniowy poligramowy

rodzaj szyfru podstawieniowego polegający na zamianie nie pojedynczych znaków, a całych ich grup na inne

tekst jawny
tekst jawny

informacja przeznaczona do zaszyfrowania lub będąca rezultatem procesu deszyfrowania