Implementacja w języku Java

Napiszemy program, który odczyta podany przez użytkownika ciąg znaków, następnie zaszyfruje go za pomocą metody płotkowej i wypisze wynik szyfrowania na ekran konsoli. Algorytm deszyfrowania zostanie zrealizowany w osobnej funkcji, aby zwiększyć czytelność kodu.

Funkcja szyfrująca

Zaczynamy od napisania funkcji odpowiadającej za szyfrowanie. Nadajemy jej nazwę szyfrujPlotkowo() oraz określamy przyjmowane parametry.

Specyfikacja problemu:

Dane:

  • ciag – zadany przez użytkownika ciąg znaków do zaszyfrowania

  • kluczkluczkluczklucz, czyli liczba całkowita dodatnia, określająca wysokość płotka

Wynik:

  • zaszyfrowane – zaszyfrowany ciąg znaków

Linia 1. static String szyfrujPlotkowo otwórz nawias okrągły String ciag przecinek int klucz zamknij nawias okrągły otwórz nawias klamrowy. Linia 3. zamknij nawias klamrowy.

Manipulacja znakami w łańcuchu znaków jest utrudniona. Deklarujemy tablicę znaków char[] zaszyfrowane o długości równej długości szyfrowanego ciągu. Na jej podstawie utworzymy i zwrócimy napis przechowujący szyfrogramszyfrogramszyfrogram.

Linia 1. static String szyfrujPlotkowo otwórz nawias okrągły String ciag przecinek int klucz zamknij nawias okrągły otwórz nawias klamrowy. Linia 2. char otwórz nawias kwadratowy zamknij nawias kwadratowy zaszyfrowane znak równości new char otwórz nawias kwadratowy ciag kropka length otwórz nawias okrągły zamknij nawias okrągły zamknij nawias kwadratowy średnik. Linia 4. return new String otwórz nawias okrągły zaszyfrowane zamknij nawias okrągły średnik. Linia 5. zamknij nawias klamrowy.

Długość ciągu znaków uzyskujemy dzięki funkcji wbudowanej – length().

Dla zainteresowanych

Więcej o funkcji length() możesz przeczytać w dokumentacji języka Java.

Tworzymy nową zmienną n i ustawiamy jej wartość początkową 0. Jej zadaniem jest wskazanie indeksu w tablicy zaszyfrowane, pod którym zostanie zapisany przetwarzany znak tekstu jawnego.

Linia 1. static String szyfrujPlotkowo otwórz nawias okrągły String ciag przecinek int klucz zamknij nawias okrągły otwórz nawias klamrowy. Linia 2. char otwórz nawias kwadratowy zamknij nawias kwadratowy zaszyfrowane znak równości new char otwórz nawias kwadratowy ciag kropka length otwórz nawias okrągły zamknij nawias okrągły zamknij nawias kwadratowy średnik. Linia 3. int n znak równości 0 średnik. Linia 5. return new String otwórz nawias okrągły zaszyfrowane zamknij nawias okrągły średnik. Linia 6. zamknij nawias klamrowy.

Deklarujemy pętlę for. Jej iterator z będzie wskazywać poziom płotka, dla którego będziemy wyznaczać kolejne znaki szyfrogramu.

Linia 1. static String szyfrujPlotkowo otwórz nawias okrągły String ciag przecinek int klucz zamknij nawias okrągły otwórz nawias klamrowy. Linia 2. char otwórz nawias kwadratowy zamknij nawias kwadratowy zaszyfrowane znak równości new char otwórz nawias kwadratowy ciag kropka length otwórz nawias okrągły zamknij nawias okrągły zamknij nawias kwadratowy średnik. Linia 3. int n znak równości 0 średnik. Linia 5. for otwórz nawias okrągły int z znak równości 0 średnik z otwórz nawias ostrokątny klucz średnik z plus plus zamknij nawias okrągły otwórz nawias klamrowy. Linia 7. zamknij nawias klamrowy. Linia 9. return new String otwórz nawias okrągły zaszyfrowane zamknij nawias okrągły średnik. Linia 10. zamknij nawias klamrowy.

Wewnątrz pętli for tworzymy dwie zmienne: indeks oraz wDol. Pierwsza posłuży do wskazania znaku tekstu jawnego, który zostanie zapisany w tablicy zaszyfrowane pod indeksem n. Druga – do wskazania kierunku (w górę/w dół) uzupełniania szczebli płotka.

Linia 1. static String szyfrujPlotkowo otwórz nawias okrągły String ciag przecinek int klucz zamknij nawias okrągły otwórz nawias klamrowy. Linia 2. char otwórz nawias kwadratowy zamknij nawias kwadratowy zaszyfrowane znak równości new char otwórz nawias kwadratowy ciag kropka length otwórz nawias okrągły zamknij nawias okrągły zamknij nawias kwadratowy średnik. Linia 3. int n znak równości 0 średnik. Linia 5. for otwórz nawias okrągły int z znak równości 0 średnik z otwórz nawias ostrokątny klucz średnik z plus plus zamknij nawias okrągły otwórz nawias klamrowy. Linia 6. int indeks znak równości z średnik. Linia 7. boolean wDol znak równości true średnik. Linia 8. zamknij nawias klamrowy. Linia 10. return new String otwórz nawias okrągły zaszyfrowane zamknij nawias okrągły średnik. Linia 11. zamknij nawias klamrowy.

Dodajemy pętlę while. Będzie się ona wykonywać, dopóki wartość zmiennej indeks będzie mniejsza od długości ciągu. Innymi słowy – posłuży do wskazania, czy powinniśmy przejść do kolejnego poziomu płotka.

Linia 1. static String szyfrujPlotkowo otwórz nawias okrągły String ciag przecinek int klucz zamknij nawias okrągły otwórz nawias klamrowy. Linia 2. char otwórz nawias kwadratowy zamknij nawias kwadratowy zaszyfrowane znak równości new char otwórz nawias kwadratowy ciag kropka length otwórz nawias okrągły zamknij nawias okrągły zamknij nawias kwadratowy średnik. Linia 3. int n znak równości 0 średnik. Linia 5. for otwórz nawias okrągły int z znak równości 0 średnik z otwórz nawias ostrokątny klucz średnik z plus plus zamknij nawias okrągły otwórz nawias klamrowy. Linia 6. int indeks znak równości z średnik. Linia 7. boolean wDol znak równości true średnik. Linia 9. while otwórz nawias okrągły indeks otwórz nawias ostrokątny ciag kropka length otwórz nawias okrągły zamknij nawias okrągły zamknij nawias okrągły otwórz nawias klamrowy. Linia 11. zamknij nawias klamrowy. Linia 12. zamknij nawias klamrowy. Linia 14. return new String otwórz nawias okrągły zaszyfrowane zamknij nawias okrągły średnik. Linia 15. zamknij nawias klamrowy.

Zaprezentowany kod stanowi pełną implementację algorytmu szyfrowania metodą płotkową. Algorytm opiera się na trzech przypadkach:

Linia 1. static String szyfrujPlotkowo otwórz nawias okrągły String ciag przecinek int klucz zamknij nawias okrągły otwórz nawias klamrowy. Linia 2. char otwórz nawias kwadratowy zamknij nawias kwadratowy zaszyfrowane znak równości new char otwórz nawias kwadratowy ciag kropka length otwórz nawias okrągły zamknij nawias okrągły zamknij nawias kwadratowy średnik. Linia 3. int n znak równości 0 średnik. Linia 5. for otwórz nawias okrągły int z znak równości 0 średnik z otwórz nawias ostrokątny klucz średnik z plus plus zamknij nawias okrągły otwórz nawias klamrowy. Linia 6. int indeks znak równości z średnik. Linia 7. boolean wDol znak równości true średnik. Linia 8. while otwórz nawias okrągły indeks otwórz nawias ostrokątny ciag kropka length otwórz nawias okrągły zamknij nawias okrągły zamknij nawias okrągły otwórz nawias klamrowy. Linia 9. zaszyfrowane otwórz nawias kwadratowy n zamknij nawias kwadratowy znak równości ciag kropka charAt otwórz nawias okrągły indeks zamknij nawias okrągły średnik. Linia 10. n plus plus średnik. Linia 12. if otwórz nawias okrągły z znak równości znak równości 0 kreska pionowa kreska pionowa z znak równości znak równości klucz minus 1 zamknij nawias okrągły otwórz nawias klamrowy. Linia 13. indeks znak równości indeks plus 2 asterysk otwórz nawias okrągły klucz minus 1 zamknij nawias okrągły średnik. Linia 14. zamknij nawias klamrowy. Linia 15. else if otwórz nawias okrągły wDol zamknij nawias okrągły otwórz nawias klamrowy. Linia 16. indeks znak równości indeks plus 2 asterysk otwórz nawias okrągły klucz minus z minus 1 zamknij nawias okrągły średnik. Linia 17. wDol znak równości wykrzyknik wDol średnik. Linia 18. zamknij nawias klamrowy. Linia 19. else otwórz nawias klamrowy. Linia 20. indeks znak równości indeks plus 2 asterysk z średnik. Linia 21. wDol znak równości wykrzyknik wDol średnik. Linia 22. zamknij nawias klamrowy. Linia 23. zamknij nawias klamrowy. Linia 24. zamknij nawias klamrowy. Linia 26. return new String otwórz nawias okrągły zaszyfrowane zamknij nawias okrągły średnik. Linia 27. zamknij nawias klamrowy.

Przypadek 1

Jeżeli aktualny indeks znajduje się na pierwszym lub ostatnim piętrze płotka, to pozycja kolejnego indeksu wyliczana jest za pomocą wzoru:

RpfzDnFhXnjUl
Źródło: Contentplus.pl Sp. z o.o., licencja: CC BY-SA 3.0.

Przypadek 2

Jeżeli aktualny indeks znajduje się na piętrze płotka innym niż pierwszy i ostatni oraz kierunek przetwarzania liter w płotku zmierza w dół, to kolejny indeks wyliczany jest za pomocą wzoru:

gdzie klucz to wysokość płotu, a z to jego aktualna wysokość.

Na rysunku oznaczone zostały miejsca, w których rozpatrywany jest ten przypadek.

RogydE5cUMLHi
Źródło: Contentplus.pl Sp. z o.o., licencja: CC BY-SA 3.0.

Przypadek 3

Jeżeli aktualny indeks znajduje się na piętrze płotka – innym niż pierwszy i ostatni – oraz kierunek przetwarzania liter w płocie zmierza w górę, to kolejny indeks wyliczany jest za pomocą wzoru:

gdzie z to aktualna wysokość płotu.

Na rysunku oznaczone zostały miejsca, w których rozpatrywany jest ten przypadek.

Rkrp396cbGYiZ
Źródło: Contentplus.pl Sp. z o.o., licencja: CC BY-SA 3.0.
Ważne!

W przypadkach 2. oraz 3. musimy pamiętać o zmianie wartości zmiennej logicznej, odpowiedzialnej za wskazywanie aktualnego kierunku przetwarzania liter. W omawianej implementacji jest to zmienna wDol. Wówczas jej wartość ustawiana jest na przeciwną do aktualnej.

Funkcja deszyfrująca

Zacznijmy od napisania funkcji odpowiadającej za deszyfrowanie. Nadajmy jej nazwę odszyfrujPlotkowo() oraz określmy przyjmowane parametry.

Specyfikacja problemu:

Dane:

  • szyfrogram – podany przez użytkownika ciąg znaków do odszyfrowania

  • klucz – klucz, czyli liczba całkowita dodatnia, określająca wysokość płotka

Wynik:

  • odszyfrowane – odszyfrowany ciąg znaków

Zwracaną wartością będzie odszyfrowany ciąg znaków – String.

Linia 1. static String odszyfrujPlotkowo otwórz nawias okrągły String szyfrogram przecinek int klucz zamknij nawias okrągły otwórz nawias klamrowy. Linia 3. zamknij nawias klamrowy.

Deklarujemy tablicę znaków char[] odszyfrowane o długości równej długości szyfrogramu. Posłuży ona do przechowywania ciągu znaków. Będzie również wartością zwracaną z funkcji, po konwersji do odpowiedniego typu. Stworzymy też tablicę char[][] plotek, która będzie odwzorowaniem płotka stosowanego przy szyfrowaniuszyfrowanieszyfrowaniu.

Linia 1. static String odszyfrujPlotkowo otwórz nawias okrągły String szyfrogram przecinek int klucz zamknij nawias okrągły otwórz nawias klamrowy. Linia 2. char otwórz nawias kwadratowy zamknij nawias kwadratowy odszyfrowane znak równości new char otwórz nawias kwadratowy szyfrogram kropka length otwórz nawias okrągły zamknij nawias okrągły zamknij nawias kwadratowy średnik. Linia 3. char otwórz nawias kwadratowy zamknij nawias kwadratowy otwórz nawias kwadratowy zamknij nawias kwadratowy plotek znak równości new char otwórz nawias kwadratowy klucz zamknij nawias kwadratowy otwórz nawias kwadratowy szyfrogram kropka length otwórz nawias okrągły zamknij nawias okrągły zamknij nawias kwadratowy średnik. Linia 5. return new String otwórz nawias okrągły odszyfrowane zamknij nawias okrągły średnik. Linia 6. zamknij nawias klamrowy.

Następnie w tabeli plotek zaznaczamy, w jakich komórkach płotka znalazły się litery pierwotnie szyfrowanego tekstu. W tym celu tworzymy zmienną zapisującą, w jakim wierszu płotka obecnie się znajdujemy, oraz zmienną sygnalizującą, czy mamy poruszać się po wierszach płotka w górę, czy w dół. Konieczne jest również stworzenie pętli do przejścia po kolumnach płotka. Za ich pomocą oznaczymy w tabeli plotek, gdzie podczas szyfrowania znajdowały się litery pierwotnego tekstu.

Linia 1. static String odszyfrujPlotkowo otwórz nawias okrągły String szyfrogram przecinek int klucz zamknij nawias okrągły otwórz nawias klamrowy. Linia 2. char otwórz nawias kwadratowy zamknij nawias kwadratowy odszyfrowane znak równości new char otwórz nawias kwadratowy szyfrogram kropka length otwórz nawias okrągły zamknij nawias okrągły zamknij nawias kwadratowy średnik. Linia 3. char otwórz nawias kwadratowy zamknij nawias kwadratowy otwórz nawias kwadratowy zamknij nawias kwadratowy plotek znak równości new char otwórz nawias kwadratowy klucz zamknij nawias kwadratowy otwórz nawias kwadratowy szyfrogram kropka length otwórz nawias okrągły zamknij nawias okrągły zamknij nawias kwadratowy średnik. Linia 5. int wiersz znak równości 0 średnik. Linia 6. boolean dol znak równości false średnik. Linia 8. for otwórz nawias okrągły int kolumna znak równości 0 średnik kolumna otwórz nawias ostrokątny szyfrogram kropka length otwórz nawias okrągły zamknij nawias okrągły średnik kolumna plus plus zamknij nawias okrągły otwórz nawias klamrowy. Linia 9. plotek otwórz nawias kwadratowy wiersz zamknij nawias kwadratowy otwórz nawias kwadratowy kolumna zamknij nawias kwadratowy znak równości apostrof asterysk apostrof średnik. Linia 10. zamknij nawias klamrowy. Linia 12. return new String otwórz nawias okrągły odszyfrowane zamknij nawias okrągły średnik. Linia 13. zamknij nawias klamrowy.

Poruszanie się po płotku w poziomie umożliwia pętla for(), pozostaje jeszcze kwestia przemieszczania się po nim w pionie. Wykorzystamy do tego celu stworzoną wcześniej zmienną pomocniczą dol. Jeśli przyjmie ona wartość true, oznacza to, że po oznaczeniu miejsca na płotku powinniśmy przejść wiersz niżej. Analogicznie wartość false oznacza konieczność przejścia wiersz wyżej. Poruszanie się po wierszach płotka jest realizowane poprzez odpowiednie zmiany wartości zmiennej wiersz.

Linia 1. static String odszyfrujPlotkowo otwórz nawias okrągły String szyfrogram przecinek int klucz zamknij nawias okrągły otwórz nawias klamrowy. Linia 2. char otwórz nawias kwadratowy zamknij nawias kwadratowy odszyfrowane znak równości new char otwórz nawias kwadratowy szyfrogram kropka length otwórz nawias okrągły zamknij nawias okrągły zamknij nawias kwadratowy średnik. Linia 3. char otwórz nawias kwadratowy zamknij nawias kwadratowy otwórz nawias kwadratowy zamknij nawias kwadratowy plotek znak równości new char otwórz nawias kwadratowy klucz zamknij nawias kwadratowy otwórz nawias kwadratowy szyfrogram kropka length otwórz nawias okrągły zamknij nawias okrągły zamknij nawias kwadratowy średnik. Linia 5. int wiersz znak równości 0 średnik. Linia 6. boolean dol znak równości false średnik. Linia 8. for otwórz nawias okrągły int kolumna znak równości 0 średnik kolumna otwórz nawias ostrokątny szyfrogram kropka length otwórz nawias okrągły zamknij nawias okrągły średnik kolumna plus plus zamknij nawias okrągły otwórz nawias klamrowy. Linia 9. plotek otwórz nawias kwadratowy wiersz zamknij nawias kwadratowy otwórz nawias kwadratowy kolumna zamknij nawias kwadratowy znak równości apostrof asterysk apostrof średnik. Linia 11. if otwórz nawias okrągły dol zamknij nawias okrągły otwórz nawias klamrowy. Linia 12. wiersz znak równości wiersz plus 1 średnik. Linia 13. zamknij nawias klamrowy else otwórz nawias klamrowy. Linia 14. wiersz znak równości wiersz minus 1 średnik. Linia 15. zamknij nawias klamrowy. Linia 16. zamknij nawias klamrowy. Linia 18. return new String otwórz nawias okrągły odszyfrowane zamknij nawias okrągły średnik. Linia 19. zamknij nawias klamrowy.

Ponieważ płotek jest ograniczony w pionie, musimy mieścić się w jego ramach. Oznacza to, że jeżeli analizowane pole znajduje się w najwyższym wierszu płotka, powinniśmy zacząć poruszać się w dół, a jeśli rozważamy pole w najniższym rzędzie, należy rozpocząć przemieszczanie w górę.

Linia 1. static String odszyfrujPlotkowo otwórz nawias okrągły String szyfrogram przecinek int klucz zamknij nawias okrągły otwórz nawias klamrowy. Linia 2. char otwórz nawias kwadratowy zamknij nawias kwadratowy odszyfrowane znak równości new char otwórz nawias kwadratowy szyfrogram kropka length otwórz nawias okrągły zamknij nawias okrągły zamknij nawias kwadratowy średnik. Linia 3. char otwórz nawias kwadratowy zamknij nawias kwadratowy otwórz nawias kwadratowy zamknij nawias kwadratowy plotek znak równości new char otwórz nawias kwadratowy klucz zamknij nawias kwadratowy otwórz nawias kwadratowy szyfrogram kropka length otwórz nawias okrągły zamknij nawias okrągły zamknij nawias kwadratowy średnik. Linia 5. int wiersz znak równości 0 średnik. Linia 6. boolean dol znak równości false średnik. Linia 8. for otwórz nawias okrągły int kolumna znak równości 0 średnik kolumna otwórz nawias ostrokątny szyfrogram kropka length otwórz nawias okrągły zamknij nawias okrągły średnik kolumna plus plus zamknij nawias okrągły otwórz nawias klamrowy. Linia 9. plotek otwórz nawias kwadratowy wiersz zamknij nawias kwadratowy otwórz nawias kwadratowy kolumna zamknij nawias kwadratowy znak równości apostrof asterysk apostrof średnik. Linia 11. if otwórz nawias okrągły wiersz znak równości znak równości klucz minus 1 zamknij nawias okrągły otwórz nawias klamrowy. Linia 12. dol znak równości false średnik. Linia 13. zamknij nawias klamrowy else if otwórz nawias okrągły wiersz znak równości znak równości 0 zamknij nawias okrągły otwórz nawias klamrowy. Linia 14. dol znak równości true średnik. Linia 15. zamknij nawias klamrowy. Linia 17. if otwórz nawias okrągły dol zamknij nawias okrągły otwórz nawias klamrowy. Linia 18. wiersz znak równości wiersz plus 1 średnik. Linia 19. zamknij nawias klamrowy else otwórz nawias klamrowy. Linia 20. wiersz znak równości wiersz minus 1 średnik. Linia 21. zamknij nawias klamrowy. Linia 22. zamknij nawias klamrowy. Linia 24. return new String otwórz nawias okrągły odszyfrowane zamknij nawias okrągły średnik. Linia 25. zamknij nawias klamrowy.

Kolejny etap to przejście po płotku (od lewej do prawej, z góry na dół) i wstawienie do oznaczonych uprzednio pól kolejnych liter szyfrogramu. Przejście po płotku zrealizujemy przy użyciu dwóch zagnieżdżonych pętli for(), a kolejne litery szyfrogramu będą wyznaczane za pomocą zmiennej pomocniczej, iterowanej po każdym podstawieniu znaku.

Linia 1. static String odszyfrujPlotkowo otwórz nawias okrągły String szyfrogram przecinek int klucz zamknij nawias okrągły otwórz nawias klamrowy. Linia 2. char otwórz nawias kwadratowy zamknij nawias kwadratowy odszyfrowane znak równości new char otwórz nawias kwadratowy szyfrogram kropka length otwórz nawias okrągły zamknij nawias okrągły zamknij nawias kwadratowy średnik. Linia 3. char otwórz nawias kwadratowy zamknij nawias kwadratowy otwórz nawias kwadratowy zamknij nawias kwadratowy plotek znak równości new char otwórz nawias kwadratowy klucz zamknij nawias kwadratowy otwórz nawias kwadratowy szyfrogram kropka length otwórz nawias okrągły zamknij nawias okrągły zamknij nawias kwadratowy średnik. Linia 5. int wiersz znak równości 0 średnik. Linia 6. boolean dol znak równości false średnik. Linia 8. for otwórz nawias okrągły int kolumna znak równości 0 średnik kolumna otwórz nawias ostrokątny szyfrogram kropka length otwórz nawias okrągły zamknij nawias okrągły średnik kolumna plus plus zamknij nawias okrągły otwórz nawias klamrowy. Linia 9. plotek otwórz nawias kwadratowy wiersz zamknij nawias kwadratowy otwórz nawias kwadratowy kolumna zamknij nawias kwadratowy znak równości apostrof asterysk apostrof średnik. Linia 11. if otwórz nawias okrągły wiersz znak równości znak równości klucz minus 1 zamknij nawias okrągły otwórz nawias klamrowy. Linia 12. dol znak równości false średnik. Linia 13. zamknij nawias klamrowy else if otwórz nawias okrągły wiersz znak równości znak równości 0 zamknij nawias okrągły otwórz nawias klamrowy. Linia 14. dol znak równości true średnik. Linia 15. zamknij nawias klamrowy. Linia 17. if otwórz nawias okrągły dol zamknij nawias okrągły otwórz nawias klamrowy. Linia 18. wiersz znak równości wiersz plus 1 średnik. Linia 19. zamknij nawias klamrowy else otwórz nawias klamrowy. Linia 20. wiersz znak równości wiersz minus 1 średnik. Linia 21. zamknij nawias klamrowy. Linia 22. zamknij nawias klamrowy. Linia 24. int znak znak równości 0 średnik. Linia 26. for otwórz nawias okrągły int i znak równości 0 średnik i otwórz nawias ostrokątny klucz średnik i plus plus zamknij nawias okrągły otwórz nawias klamrowy. Linia 27. for otwórz nawias okrągły int j znak równości 0 średnik j otwórz nawias ostrokątny szyfrogram kropka length otwórz nawias okrągły zamknij nawias okrągły średnik j plus plus zamknij nawias okrągły otwórz nawias klamrowy. Linia 28. if otwórz nawias okrągły plotek otwórz nawias kwadratowy i zamknij nawias kwadratowy otwórz nawias kwadratowy j zamknij nawias kwadratowy znak równości znak równości apostrof asterysk apostrof zamknij nawias okrągły otwórz nawias klamrowy. Linia 29. plotek otwórz nawias kwadratowy i zamknij nawias kwadratowy otwórz nawias kwadratowy j zamknij nawias kwadratowy znak równości szyfrogram kropka charAt otwórz nawias okrągły znak zamknij nawias okrągły średnik. Linia 30. znak znak równości znak plus 1 średnik. Linia 31. zamknij nawias klamrowy. Linia 32. zamknij nawias klamrowy. Linia 33. zamknij nawias klamrowy. Linia 35. return new String otwórz nawias okrągły odszyfrowane zamknij nawias okrągły średnik. Linia 36. zamknij nawias klamrowy.

Ostatnim krokiem jest przejście tak zmodyfikowanego płotka w sposób analogiczny do oznaczania miejsc zajętych na nim przez litery pierwotnie szyfrowanego słowa.  Jednak zamiast oznaczać miejsca na płotku, zapiszemy wartości w nich zawarte w kolejnych miejscach tablicy wynikowej, otrzymując w ten sposób odszyfrowany ciąg znaków.

Linia 1. static String odszyfrujPlotkowo otwórz nawias okrągły String szyfrogram przecinek int klucz zamknij nawias okrągły otwórz nawias klamrowy. Linia 2. char otwórz nawias kwadratowy zamknij nawias kwadratowy odszyfrowane znak równości new char otwórz nawias kwadratowy szyfrogram kropka length otwórz nawias okrągły zamknij nawias okrągły zamknij nawias kwadratowy średnik. Linia 3. char otwórz nawias kwadratowy zamknij nawias kwadratowy otwórz nawias kwadratowy zamknij nawias kwadratowy plotek znak równości new char otwórz nawias kwadratowy klucz zamknij nawias kwadratowy otwórz nawias kwadratowy szyfrogram kropka length otwórz nawias okrągły zamknij nawias okrągły zamknij nawias kwadratowy średnik. Linia 5. int wiersz znak równości 0 średnik. Linia 6. boolean dol znak równości false średnik. Linia 8. for otwórz nawias okrągły int kolumna znak równości 0 średnik kolumna otwórz nawias ostrokątny szyfrogram kropka length otwórz nawias okrągły zamknij nawias okrągły średnik kolumna plus plus zamknij nawias okrągły otwórz nawias klamrowy. Linia 9. plotek otwórz nawias kwadratowy wiersz zamknij nawias kwadratowy otwórz nawias kwadratowy kolumna zamknij nawias kwadratowy znak równości apostrof asterysk apostrof średnik. Linia 11. if otwórz nawias okrągły wiersz znak równości znak równości klucz minus 1 zamknij nawias okrągły otwórz nawias klamrowy. Linia 12. dol znak równości false średnik. Linia 13. zamknij nawias klamrowy else if otwórz nawias okrągły wiersz znak równości znak równości 0 zamknij nawias okrągły otwórz nawias klamrowy. Linia 14. dol znak równości true średnik. Linia 15. zamknij nawias klamrowy. Linia 17. if otwórz nawias okrągły dol zamknij nawias okrągły otwórz nawias klamrowy. Linia 18. wiersz znak równości wiersz plus 1 średnik. Linia 19. zamknij nawias klamrowy else otwórz nawias klamrowy. Linia 20. wiersz znak równości wiersz minus 1 średnik. Linia 21. zamknij nawias klamrowy. Linia 22. zamknij nawias klamrowy. Linia 24. int znak znak równości 0 średnik. Linia 26. for otwórz nawias okrągły int i znak równości 0 średnik i otwórz nawias ostrokątny klucz średnik i plus plus zamknij nawias okrągły otwórz nawias klamrowy. Linia 27. for otwórz nawias okrągły int j znak równości 0 średnik j otwórz nawias ostrokątny szyfrogram kropka length otwórz nawias okrągły zamknij nawias okrągły średnik j plus plus zamknij nawias okrągły otwórz nawias klamrowy. Linia 28. if otwórz nawias okrągły plotek otwórz nawias kwadratowy i zamknij nawias kwadratowy otwórz nawias kwadratowy j zamknij nawias kwadratowy znak równości znak równości apostrof asterysk apostrof zamknij nawias okrągły otwórz nawias klamrowy. Linia 29. plotek otwórz nawias kwadratowy i zamknij nawias kwadratowy otwórz nawias kwadratowy j zamknij nawias kwadratowy znak równości szyfrogram kropka charAt otwórz nawias okrągły znak zamknij nawias okrągły średnik. Linia 30. znak znak równości znak plus 1 średnik. Linia 31. zamknij nawias klamrowy. Linia 32. zamknij nawias klamrowy. Linia 33. zamknij nawias klamrowy. Linia 35. wiersz znak równości 0 średnik. Linia 37. for otwórz nawias okrągły int kolumna znak równości 0 średnik kolumna otwórz nawias ostrokątny szyfrogram kropka length otwórz nawias okrągły zamknij nawias okrągły średnik kolumna plus plus zamknij nawias okrągły otwórz nawias klamrowy. Linia 38. odszyfrowane otwórz nawias kwadratowy kolumna zamknij nawias kwadratowy znak równości plotek otwórz nawias kwadratowy wiersz zamknij nawias kwadratowy otwórz nawias kwadratowy kolumna zamknij nawias kwadratowy średnik. Linia 40. if otwórz nawias okrągły wiersz znak równości znak równości klucz minus 1 zamknij nawias okrągły otwórz nawias klamrowy. Linia 41. dol znak równości false średnik. Linia 42. zamknij nawias klamrowy else if otwórz nawias okrągły wiersz znak równości znak równości 0 zamknij nawias okrągły otwórz nawias klamrowy. Linia 43. dol znak równości true średnik. Linia 44. zamknij nawias klamrowy. Linia 46. if otwórz nawias okrągły dol zamknij nawias okrągły otwórz nawias klamrowy. Linia 47. wiersz znak równości wiersz plus 1 średnik. Linia 48. zamknij nawias klamrowy else otwórz nawias klamrowy. Linia 49. wiersz znak równości wiersz minus 1 średnik. Linia 50. zamknij nawias klamrowy. Linia 51. zamknij nawias klamrowy. Linia 53. return new String otwórz nawias okrągły odszyfrowane zamknij nawias okrągły średnik. Linia 54. zamknij nawias klamrowy.

Zadeklarujmy teraz główną funkcję programu, w której za pomocą klasy Scanner pobierzemy od użytkownika ciąg znaków do zaszyfrowania oraz klucz. Następnie wywołamy utworzone przed chwilą funkcje i wypiszemy w konsoli wynik szyfrowania. W kolejnym kroku ponownie go odszyfrujemy.

Linia 1. public static void main otwórz nawias okrągły String otwórz nawias kwadratowy zamknij nawias kwadratowy args zamknij nawias okrągły otwórz nawias klamrowy. Linia 2. Scanner scanner znak równości new Scanner otwórz nawias okrągły System kropka in zamknij nawias okrągły średnik. Linia 3. String doZaszyfrowania znak równości scanner kropka nextLine otwórz nawias okrągły zamknij nawias okrągły średnik. Linia 4. int klucz znak równości scanner kropka nextInt otwórz nawias okrągły zamknij nawias okrągły średnik. Linia 5. String szyfrogram znak równości szyfrujPlotkowo otwórz nawias okrągły doZaszyfrowania przecinek klucz zamknij nawias okrągły średnik. Linia 6. System kropka out kropka println otwórz nawias okrągły szyfrogram zamknij nawias okrągły średnik. Linia 7. String odszyfrowanySzyfrogram znak równości odszyfrujPlotkowo otwórz nawias okrągły szyfrogram przecinek klucz zamknij nawias okrągły średnik. Linia 8. System kropka out kropka println otwórz nawias okrągły odszyfrowanySzyfrogram zamknij nawias okrągły średnik. Linia 9. zamknij nawias klamrowy.

Oto kod całego programu:

Linia 1. import java kropka util kropka Scanner średnik. Linia 3. public class SzyfrPlotkowy otwórz nawias klamrowy. Linia 5. static String szyfrujPlotkowo otwórz nawias okrągły String ciag przecinek int klucz zamknij nawias okrągły otwórz nawias klamrowy. Linia 6. char otwórz nawias kwadratowy zamknij nawias kwadratowy zaszyfrowane znak równości new char otwórz nawias kwadratowy ciag kropka length otwórz nawias okrągły zamknij nawias okrągły zamknij nawias kwadratowy średnik. Linia 7. int n znak równości 0 średnik. Linia 9. for otwórz nawias okrągły int z znak równości 0 średnik z otwórz nawias ostrokątny klucz średnik z plus plus zamknij nawias okrągły otwórz nawias klamrowy. Linia 10. int indeks znak równości z średnik. Linia 11. boolean wDol znak równości true średnik. Linia 12. while otwórz nawias okrągły indeks otwórz nawias ostrokątny ciag kropka length otwórz nawias okrągły zamknij nawias okrągły zamknij nawias okrągły otwórz nawias klamrowy. Linia 13. zaszyfrowane otwórz nawias kwadratowy n zamknij nawias kwadratowy znak równości ciag kropka charAt otwórz nawias okrągły indeks zamknij nawias okrągły średnik. Linia 14. n plus plus średnik. Linia 16. if otwórz nawias okrągły z znak równości znak równości 0 kreska pionowa kreska pionowa z znak równości znak równości klucz minus 1 zamknij nawias okrągły otwórz nawias klamrowy. Linia 17. indeks znak równości indeks plus 2 asterysk otwórz nawias okrągły klucz minus 1 zamknij nawias okrągły średnik. Linia 18. zamknij nawias klamrowy. Linia 19. else if otwórz nawias okrągły wDol zamknij nawias okrągły otwórz nawias klamrowy. Linia 20. indeks znak równości indeks plus 2 asterysk otwórz nawias okrągły klucz minus z minus 1 zamknij nawias okrągły średnik. Linia 21. wDol znak równości wykrzyknik wDol średnik. Linia 22. zamknij nawias klamrowy. Linia 23. else otwórz nawias klamrowy. Linia 24. indeks znak równości indeks plus 2 asterysk z średnik. Linia 25. wDol znak równości wykrzyknik wDol średnik. Linia 26. zamknij nawias klamrowy. Linia 27. zamknij nawias klamrowy. Linia 28. zamknij nawias klamrowy. Linia 30. return new String otwórz nawias okrągły zaszyfrowane zamknij nawias okrągły średnik. Linia 31. zamknij nawias klamrowy. Linia 33. static String odszyfrujPlotkowo otwórz nawias okrągły String szyfrogram przecinek int klucz zamknij nawias okrągły otwórz nawias klamrowy. Linia 34. char otwórz nawias kwadratowy zamknij nawias kwadratowy odszyfrowane znak równości new char otwórz nawias kwadratowy szyfrogram kropka length otwórz nawias okrągły zamknij nawias okrągły zamknij nawias kwadratowy średnik. Linia 35. char otwórz nawias kwadratowy zamknij nawias kwadratowy otwórz nawias kwadratowy zamknij nawias kwadratowy plotek znak równości new char otwórz nawias kwadratowy klucz zamknij nawias kwadratowy otwórz nawias kwadratowy szyfrogram kropka length otwórz nawias okrągły zamknij nawias okrągły zamknij nawias kwadratowy średnik. Linia 37. int wiersz znak równości 0 średnik. Linia 38. boolean dol znak równości false średnik. Linia 40. for otwórz nawias okrągły int kolumna znak równości 0 średnik kolumna otwórz nawias ostrokątny szyfrogram kropka length otwórz nawias okrągły zamknij nawias okrągły średnik kolumna plus plus zamknij nawias okrągły otwórz nawias klamrowy. Linia 41. plotek otwórz nawias kwadratowy wiersz zamknij nawias kwadratowy otwórz nawias kwadratowy kolumna zamknij nawias kwadratowy znak równości apostrof asterysk apostrof średnik. Linia 43. if otwórz nawias okrągły wiersz znak równości znak równości klucz minus 1 zamknij nawias okrągły otwórz nawias klamrowy. Linia 44. dol znak równości false średnik. Linia 45. zamknij nawias klamrowy else if otwórz nawias okrągły wiersz znak równości znak równości 0 zamknij nawias okrągły otwórz nawias klamrowy. Linia 46. dol znak równości true średnik. Linia 47. zamknij nawias klamrowy. Linia 49. if otwórz nawias okrągły dol zamknij nawias okrągły otwórz nawias klamrowy. Linia 50. wiersz znak równości wiersz plus 1 średnik. Linia 51. zamknij nawias klamrowy else otwórz nawias klamrowy. Linia 52. wiersz znak równości wiersz minus 1 średnik. Linia 53. zamknij nawias klamrowy. Linia 54. zamknij nawias klamrowy. Linia 56. int znak znak równości 0 średnik. Linia 58. for otwórz nawias okrągły int i znak równości 0 średnik i otwórz nawias ostrokątny klucz średnik i plus plus zamknij nawias okrągły otwórz nawias klamrowy. Linia 59. for otwórz nawias okrągły int j znak równości 0 średnik j otwórz nawias ostrokątny szyfrogram kropka length otwórz nawias okrągły zamknij nawias okrągły średnik j plus plus zamknij nawias okrągły otwórz nawias klamrowy. Linia 60. if otwórz nawias okrągły plotek otwórz nawias kwadratowy i zamknij nawias kwadratowy otwórz nawias kwadratowy j zamknij nawias kwadratowy znak równości znak równości apostrof asterysk apostrof zamknij nawias okrągły otwórz nawias klamrowy. Linia 61. plotek otwórz nawias kwadratowy i zamknij nawias kwadratowy otwórz nawias kwadratowy j zamknij nawias kwadratowy znak równości szyfrogram kropka charAt otwórz nawias okrągły znak zamknij nawias okrągły średnik. Linia 62. znak znak równości znak plus 1 średnik. Linia 63. zamknij nawias klamrowy. Linia 64. zamknij nawias klamrowy. Linia 65. zamknij nawias klamrowy. Linia 67. wiersz znak równości 0 średnik. Linia 69. for otwórz nawias okrągły int kolumna znak równości 0 średnik kolumna otwórz nawias ostrokątny szyfrogram kropka length otwórz nawias okrągły zamknij nawias okrągły średnik kolumna plus plus zamknij nawias okrągły otwórz nawias klamrowy. Linia 70. odszyfrowane otwórz nawias kwadratowy kolumna zamknij nawias kwadratowy znak równości plotek otwórz nawias kwadratowy wiersz zamknij nawias kwadratowy otwórz nawias kwadratowy kolumna zamknij nawias kwadratowy średnik. Linia 72. if otwórz nawias okrągły wiersz znak równości znak równości klucz minus 1 zamknij nawias okrągły otwórz nawias klamrowy. Linia 73. dol znak równości false średnik. Linia 74. zamknij nawias klamrowy else if otwórz nawias okrągły wiersz znak równości znak równości 0 zamknij nawias okrągły otwórz nawias klamrowy. Linia 75. dol znak równości true średnik. Linia 76. zamknij nawias klamrowy. Linia 78. if otwórz nawias okrągły dol zamknij nawias okrągły otwórz nawias klamrowy. Linia 79. wiersz znak równości wiersz plus 1 średnik. Linia 80. zamknij nawias klamrowy else otwórz nawias klamrowy. Linia 81. wiersz znak równości wiersz minus 1 średnik. Linia 82. zamknij nawias klamrowy. Linia 83. zamknij nawias klamrowy. Linia 85. return new String otwórz nawias okrągły odszyfrowane zamknij nawias okrągły średnik. Linia 86. zamknij nawias klamrowy. Linia 88. public static void main otwórz nawias okrągły String otwórz nawias kwadratowy zamknij nawias kwadratowy args zamknij nawias okrągły otwórz nawias klamrowy. Linia 89. Scanner scanner znak równości new Scanner otwórz nawias okrągły System kropka in zamknij nawias okrągły średnik. Linia 90. String doZaszyfrowania znak równości scanner kropka nextLine otwórz nawias okrągły zamknij nawias okrągły średnik. Linia 91. int klucz znak równości scanner kropka nextInt otwórz nawias okrągły zamknij nawias okrągły średnik. Linia 92. String szyfrogram znak równości szyfrujPlotkowo otwórz nawias okrągły doZaszyfrowania przecinek klucz zamknij nawias okrągły średnik. Linia 93. System kropka out kropka println otwórz nawias okrągły szyfrogram zamknij nawias okrągły średnik. Linia 94. String odszyfrowanySzyfrogram znak równości odszyfrujPlotkowo otwórz nawias okrągły szyfrogram przecinek klucz zamknij nawias okrągły średnik. Linia 95. System kropka out kropka println otwórz nawias okrągły odszyfrowanySzyfrogram zamknij nawias okrągły średnik. Linia 96. zamknij nawias klamrowy. Linia 97. zamknij nawias klamrowy.
Dla zainteresowanych

Przedstawione rozwiązanie jest rozwiązaniem uniwersalnym (działa dla dowolnego klucza i ciągu znaków), jednak ma ono złożoność kwadratową. Jeżeli wiemy, że będziemy szyfrować wyłącznie z wykorzystaniem danego klucza, to możemy stworzyć rozwiązanie o złożoności liniowej. Przykład takiego rozwiązania zostanie zaprezentowany dla klucza o wartości 3.

Funkcja szyfrująca

Podobnie jak w przypadku rozwiązania uniwersalnego, zaczynamy od stworzenia tablicy do przechowania tworzonego szyfrogramu i napisania instrukcji zwracającej ją na zakończenie funkcji.

Linia 1. static String szyfrujPlotkowo otwórz nawias okrągły String ciag zamknij nawias okrągły otwórz nawias klamrowy. Linia 2. char otwórz nawias kwadratowy zamknij nawias kwadratowy szyfrogram znak równości new char otwórz nawias kwadratowy ciag kropka length otwórz nawias okrągły zamknij nawias okrągły zamknij nawias kwadratowy średnik. Linia 4. return new String otwórz nawias okrągły szyfrogram zamknij nawias okrągły średnik. Linia 5. zamknij nawias klamrowy.

Kolejnym krokiem jest symulacja przetworzenia każdego poziomu płotka z osobna. Znając z góry klucz, którym będziemy szyfrować, jesteśmy w stanie określić odstępy między literami szyfrowanego ciągu na poszczególnych poziomach płotka oraz pozycje pierwszych elementów poszczególnych poziomów. Wiedzę tę wykorzystamy do zasymulowania tworzenia płotka i uzupełnienia szyfrogramu.

Linia 1. static String szyfrujPlotkowo otwórz nawias okrągły String ciag zamknij nawias okrągły otwórz nawias klamrowy. Linia 2. char otwórz nawias kwadratowy zamknij nawias kwadratowy szyfrogram znak równości new char otwórz nawias kwadratowy ciag kropka length otwórz nawias okrągły zamknij nawias okrągły zamknij nawias kwadratowy średnik. Linia 4. for otwórz nawias okrągły int i znak równości 0 średnik i otwórz nawias ostrokątny ciag kropka length otwórz nawias okrągły zamknij nawias okrągły średnik i plus znak równości 4 zamknij nawias okrągły otwórz nawias klamrowy. Linia 6. zamknij nawias klamrowy. Linia 7. for otwórz nawias okrągły int i znak równości 1 średnik i otwórz nawias ostrokątny ciag 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 9. zamknij nawias klamrowy. Linia 10. for otwórz nawias okrągły int i znak równości 2 średnik i otwórz nawias ostrokątny ciag kropka length otwórz nawias okrągły zamknij nawias okrągły średnik i plus znak równości 4 zamknij nawias okrągły otwórz nawias klamrowy. Linia 12. zamknij nawias klamrowy. Linia 13. return new String otwórz nawias okrągły szyfrogram zamknij nawias okrągły średnik. Linia 14. zamknij nawias klamrowy.

Każda ze stworzonych pętli odpowiedzialna jest za symulację przetwarzania jednego poziomu płotka. Pętle zaczynają iteracjeiteracjaiteracje od pozycji pierwszego elementu poziomu, a iterator zwiększany jest o odstęp między kolejnymi elementami na tym poziomie. Iterator każdej pętli jest ograniczony rozmiarem płotka – długością szyfrowanego ciągu znaków.

Wyznaczamy pozycje, które w szyfrogramie zajmą poszczególne litery – kolejne wartości iteratorów następujących po sobie pętli sygnalizują, która litera szyfrowanego ciągu znaków powinna zostać umieszczona w szyfrogramie jako następna. Ponieważ do przechowywania docelowego szyfrogramu wykorzystujemy tablicę znaków, potrzebna jest zmienna pomocnicza wyznaczająca indeks tablicy, pod który należy wstawić dany znak. Zmienna ta powinna być zwiększana po każdym wstawieniu do szyfrogramu znaku.

Linia 1. static String szyfrujPlotkowo otwórz nawias okrągły String ciag zamknij nawias okrągły otwórz nawias klamrowy. Linia 2. char otwórz nawias kwadratowy zamknij nawias kwadratowy szyfrogram znak równości new char otwórz nawias kwadratowy ciag kropka length otwórz nawias okrągły zamknij nawias okrągły zamknij nawias kwadratowy średnik. Linia 3. int index znak równości 0 średnik. Linia 5. for otwórz nawias okrągły int i znak równości 0 średnik i otwórz nawias ostrokątny ciag kropka length otwórz nawias okrągły zamknij nawias okrągły średnik i plus znak równości 4 zamknij nawias okrągły otwórz nawias klamrowy. Linia 6. szyfrogram otwórz nawias kwadratowy index zamknij nawias kwadratowy znak równości ciag kropka charAt otwórz nawias okrągły i zamknij nawias okrągły średnik. Linia 7. index plus plus średnik. Linia 8. zamknij nawias klamrowy. Linia 9. for otwórz nawias okrągły int i znak równości 1 średnik i otwórz nawias ostrokątny ciag 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 10. szyfrogram otwórz nawias kwadratowy index zamknij nawias kwadratowy znak równości ciag kropka charAt otwórz nawias okrągły i zamknij nawias okrągły średnik. Linia 11. index plus plus średnik. Linia 12. zamknij nawias klamrowy. Linia 13. for otwórz nawias okrągły int i znak równości 2 średnik i otwórz nawias ostrokątny ciag kropka length otwórz nawias okrągły zamknij nawias okrągły średnik i plus znak równości 4 zamknij nawias okrągły otwórz nawias klamrowy. Linia 14. szyfrogram otwórz nawias kwadratowy index zamknij nawias kwadratowy znak równości ciag kropka charAt otwórz nawias okrągły i zamknij nawias okrągły średnik. Linia 15. index plus plus średnik. Linia 16. zamknij nawias klamrowy. Linia 17. return new String otwórz nawias okrągły szyfrogram zamknij nawias okrągły średnik. Linia 18. zamknij nawias klamrowy.

Ostatnim krokiem jest konwersja tablicy z szyfrogramem do typu String i jej zwrócenie.

Funkcja deszyfrująca

Podobnie jak w przypadku funkcji szyfrującej, pierwszym etapem jest stworzenie tablicy znaków i instrukcji jej zwrócenia (po uprzedniej konwersji).

Linia 1. static String odszyfrujPlotkowo otwórz nawias okrągły String ciag zamknij nawias okrągły otwórz nawias klamrowy. Linia 2. char otwórz nawias kwadratowy zamknij nawias kwadratowy odszyfrowane znak równości new char otwórz nawias kwadratowy ciag kropka length otwórz nawias okrągły zamknij nawias okrągły zamknij nawias kwadratowy średnik. Linia 4. return new String otwórz nawias okrągły odszyfrowane zamknij nawias okrągły średnik. Linia 5. zamknij nawias klamrowy.

Kolejny krok to utworzenie pętli pozwalających na zasymulowanie przetwarzania płotka.

Linia 1. static String odszyfrujPlotkowo otwórz nawias okrągły String ciag zamknij nawias okrągły otwórz nawias klamrowy. Linia 2. char otwórz nawias kwadratowy zamknij nawias kwadratowy odszyfrowane znak równości new char otwórz nawias kwadratowy ciag kropka length otwórz nawias okrągły zamknij nawias okrągły zamknij nawias kwadratowy średnik. Linia 4. for otwórz nawias okrągły int i znak równości 0 średnik i otwórz nawias ostrokątny ciag kropka length otwórz nawias okrągły zamknij nawias okrągły średnik i plus znak równości 4 zamknij nawias okrągły otwórz nawias klamrowy. Linia 6. zamknij nawias klamrowy. Linia 7. for otwórz nawias okrągły int i znak równości 1 średnik i otwórz nawias ostrokątny ciag 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 9. zamknij nawias klamrowy. Linia 10. for otwórz nawias okrągły int i znak równości 2 średnik i otwórz nawias ostrokątny ciag kropka length otwórz nawias okrągły zamknij nawias okrągły średnik i plus znak równości 4 zamknij nawias okrągły otwórz nawias klamrowy. Linia 12. zamknij nawias klamrowy. Linia 13. return new String otwórz nawias okrągły odszyfrowane zamknij nawias okrągły średnik. Linia 14. zamknij nawias klamrowy.

Kolejne wartości iteratorów pętli wskazują na pozycje w tworzonym ciągu znaków, na których powinny znaleźć się następne litery szyfrogramu. Również w wypadku funkcji deszyfrującej potrzebna jest zmienna pomocnicza, iterowana po każdym przetworzonym znaku. Tym razem wskazuje ona na kolejne znaki szyfrogramu, które powinny zostać wstawione w odszyfrowywany ciąg znaków na pozycje wyznaczone przez iteratory pętli.

Linia 1. static String odszyfrujPlotkowo otwórz nawias okrągły String ciag zamknij nawias okrągły otwórz nawias klamrowy. Linia 2. char otwórz nawias kwadratowy zamknij nawias kwadratowy odszyfrowane znak równości new char otwórz nawias kwadratowy ciag kropka length otwórz nawias okrągły zamknij nawias okrągły zamknij nawias kwadratowy średnik. Linia 3. int index znak równości 0 średnik. Linia 5. for otwórz nawias okrągły int i znak równości 0 średnik i otwórz nawias ostrokątny ciag kropka length otwórz nawias okrągły zamknij nawias okrągły średnik i plus znak równości 4 zamknij nawias okrągły otwórz nawias klamrowy. Linia 6. odszyfrowane otwórz nawias kwadratowy i zamknij nawias kwadratowy znak równości ciag kropka charAt otwórz nawias okrągły index zamknij nawias okrągły średnik. Linia 7. index plus plus średnik. Linia 8. zamknij nawias klamrowy. Linia 9. for otwórz nawias okrągły int i znak równości 1 średnik i otwórz nawias ostrokątny ciag 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 10. odszyfrowane otwórz nawias kwadratowy i zamknij nawias kwadratowy znak równości ciag kropka charAt otwórz nawias okrągły index zamknij nawias okrągły średnik. Linia 11. index plus plus średnik. Linia 12. zamknij nawias klamrowy. Linia 13. for otwórz nawias okrągły int i znak równości 2 średnik i otwórz nawias ostrokątny ciag kropka length otwórz nawias okrągły zamknij nawias okrągły średnik i plus znak równości 4 zamknij nawias okrągły otwórz nawias klamrowy. Linia 14. odszyfrowane otwórz nawias kwadratowy i zamknij nawias kwadratowy znak równości ciag kropka charAt otwórz nawias okrągły index zamknij nawias okrągły średnik. Linia 15. index plus plus średnik. Linia 16. zamknij nawias klamrowy. Linia 17. return new String otwórz nawias okrągły odszyfrowane zamknij nawias okrągły średnik. Linia 18. zamknij nawias klamrowy.

Funkcja odszyfrowująca zakończona jest konwersją tablicy z odszyfrowanym tekstem do typu String i jego zwróceniem.

Jako ostatnią tworzymy główną funkcję programu, w której przy użyciu klasy Scanner pobieramy od użytkownika tekst do zaszyfrowania. Następnie wywołujemy na wprowadzonym tekście funkcję szyfrującą i wypisujemy wynik. Zaszyfrowany tekst odszyfrowujemy i wypisujemy rezultat, w celu sprawdzenia działania obu stworzonych funkcji.

Linia 1. public static void main otwórz nawias okrągły String otwórz nawias kwadratowy zamknij nawias kwadratowy args zamknij nawias okrągły otwórz nawias klamrowy. Linia 2. Scanner scanner znak równości new Scanner otwórz nawias okrągły System kropka in zamknij nawias okrągły średnik. Linia 3. String doZaszyfrowania znak równości scanner kropka nextLine otwórz nawias okrągły zamknij nawias okrągły średnik. Linia 4. String szyfrogram znak równości szyfrujPlotkowo otwórz nawias okrągły doZaszyfrowania zamknij nawias okrągły średnik. Linia 5. System kropka out kropka println otwórz nawias okrągły szyfrogram zamknij nawias okrągły średnik. Linia 6. String odszyfrowanySzyfrogram znak równości odszyfrujPlotkowo otwórz nawias okrągły szyfrogram zamknij nawias okrągły średnik. Linia 7. System kropka out kropka println otwórz nawias okrągły odszyfrowanySzyfrogram zamknij nawias okrągły średnik. Linia 8. zamknij nawias klamrowy.

Cały kod do szyfrowania ze stałym kluczem wygląda następująco.

Linia 1. import java kropka util kropka Scanner średnik. Linia 3. public class SzyfrPlotkowy otwórz nawias klamrowy. Linia 5. static String szyfrujPlotkowo otwórz nawias okrągły String ciag zamknij nawias okrągły otwórz nawias klamrowy. Linia 6. char otwórz nawias kwadratowy zamknij nawias kwadratowy szyfrogram znak równości new char otwórz nawias kwadratowy ciag kropka length otwórz nawias okrągły zamknij nawias okrągły zamknij nawias kwadratowy średnik. Linia 7. int index znak równości 0 średnik. Linia 9. for otwórz nawias okrągły int i znak równości 0 średnik i otwórz nawias ostrokątny ciag kropka length otwórz nawias okrągły zamknij nawias okrągły średnik i plus znak równości 4 zamknij nawias okrągły otwórz nawias klamrowy. Linia 10. szyfrogram otwórz nawias kwadratowy index zamknij nawias kwadratowy znak równości ciag kropka charAt otwórz nawias okrągły i zamknij nawias okrągły średnik. Linia 11. index plus plus średnik. Linia 12. zamknij nawias klamrowy. Linia 13. for otwórz nawias okrągły int i znak równości 1 średnik i otwórz nawias ostrokątny ciag 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. szyfrogram otwórz nawias kwadratowy index zamknij nawias kwadratowy znak równości ciag kropka charAt otwórz nawias okrągły i zamknij nawias okrągły średnik. Linia 15. index plus plus średnik. Linia 16. zamknij nawias klamrowy. Linia 17. for otwórz nawias okrągły int i znak równości 2 średnik i otwórz nawias ostrokątny ciag kropka length otwórz nawias okrągły zamknij nawias okrągły średnik i plus znak równości 4 zamknij nawias okrągły otwórz nawias klamrowy. Linia 18. szyfrogram otwórz nawias kwadratowy index zamknij nawias kwadratowy znak równości ciag kropka charAt otwórz nawias okrągły i zamknij nawias okrągły średnik. Linia 19. index plus plus średnik. Linia 20. zamknij nawias klamrowy. Linia 21. return new String otwórz nawias okrągły szyfrogram zamknij nawias okrągły średnik. Linia 22. zamknij nawias klamrowy. Linia 24. static String odszyfrujPlotkowo otwórz nawias okrągły String ciag zamknij nawias okrągły otwórz nawias klamrowy. Linia 25. char otwórz nawias kwadratowy zamknij nawias kwadratowy odszyfrowane znak równości new char otwórz nawias kwadratowy ciag kropka length otwórz nawias okrągły zamknij nawias okrągły zamknij nawias kwadratowy średnik. Linia 26. int index znak równości 0 średnik. Linia 28. for otwórz nawias okrągły int i znak równości 0 średnik i otwórz nawias ostrokątny ciag kropka length otwórz nawias okrągły zamknij nawias okrągły średnik i plus znak równości 4 zamknij nawias okrągły otwórz nawias klamrowy. Linia 29. odszyfrowane otwórz nawias kwadratowy i zamknij nawias kwadratowy znak równości ciag kropka charAt otwórz nawias okrągły index zamknij nawias okrągły średnik. Linia 30. index plus plus średnik. Linia 31. zamknij nawias klamrowy. Linia 32. for otwórz nawias okrągły int i znak równości 1 średnik i otwórz nawias ostrokątny ciag 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 33. odszyfrowane otwórz nawias kwadratowy i zamknij nawias kwadratowy znak równości ciag kropka charAt otwórz nawias okrągły index zamknij nawias okrągły średnik. Linia 34. index plus plus średnik. Linia 35. zamknij nawias klamrowy. Linia 36. for otwórz nawias okrągły int i znak równości 2 średnik i otwórz nawias ostrokątny ciag kropka length otwórz nawias okrągły zamknij nawias okrągły średnik i plus znak równości 4 zamknij nawias okrągły otwórz nawias klamrowy. Linia 37. odszyfrowane otwórz nawias kwadratowy i zamknij nawias kwadratowy znak równości ciag kropka charAt otwórz nawias okrągły index zamknij nawias okrągły średnik. Linia 38. index plus plus średnik. Linia 39. zamknij nawias klamrowy. Linia 40. return new String otwórz nawias okrągły odszyfrowane zamknij nawias okrągły średnik. Linia 41. zamknij nawias klamrowy. Linia 43. public static void main otwórz nawias okrągły String otwórz nawias kwadratowy zamknij nawias kwadratowy args zamknij nawias okrągły otwórz nawias klamrowy. Linia 44. Scanner scanner znak równości new Scanner otwórz nawias okrągły System kropka in zamknij nawias okrągły średnik. Linia 45. String doZaszyfrowania znak równości scanner kropka nextLine otwórz nawias okrągły zamknij nawias okrągły średnik. Linia 46. String szyfrogram znak równości szyfrujPlotkowo otwórz nawias okrągły doZaszyfrowania zamknij nawias okrągły średnik. Linia 47. System kropka out kropka println otwórz nawias okrągły szyfrogram zamknij nawias okrągły średnik. Linia 48. String odszyfrowanySzyfrogram znak równości odszyfrujPlotkowo otwórz nawias okrągły szyfrogram zamknij nawias okrągły średnik. Linia 49. System kropka out kropka println otwórz nawias okrągły odszyfrowanySzyfrogram zamknij nawias okrągły średnik. Linia 50. zamknij nawias klamrowy. Linia 51. zamknij nawias klamrowy.

Słownik

iteracja
iteracja

technika programowania, która polega na powtarzaniu tej samej operacji określoną liczbę razy lub do momentu, w którym zadany warunek zostanie spełniony

klucz
klucz

informacja, która jest wykorzystywana do szyfrowania i/lub deszyfrowania wiadomości

klucz prywatny
klucz prywatny

tajny klucz wykorzystywany w procesie deszyfrowania w szyfrach asymetrycznych; powinien być znany jedynie adresatowi zaszyfrowanej wiadomości

klucz publiczny
klucz publiczny

udostępniony publicznie klucz wykorzystywany w procesie szyfrowania w szyfrach asymetrycznych

kryptografia
kryptografia

gałąź wiedzy o zapisywaniu informacji w sposób utrudniający bądź całkowicie uniemożliwiający jej odczytanie

szyfrogram
szyfrogram

zaszyfrowana wiadomość

szyfrowanie
szyfrowanie

przekształcanie tekstu jawnego w szyfrogram

tablica ASCII
tablica ASCII

spis kodów znaków wykorzystywany w komputerach

zmienna logiczna
zmienna logiczna

zmienna, która przyjmuje wartości 1 (true – prawda) lub 0 (false – fałsz); najczęściej używana do sprawdzenia, czy dany warunek zachodzi