Algorytm tworzenia klucza

Zacznijmy od zaimplementowania algorytmu, który stworzy klucz potrzebny do zaszyfrowania tekstu.

Ważne!

W programie będziemy importowali tylko java.util.Scanner – dodajmy to na początek kodu. Ponadto program będzie składał się wyłącznie z czterech statycznych metod (trzy metody do algorytmu i jedna do zademonstrowania, jak ten algorytm działa). Wszystkie metody należy umieścić w jednej publicznej klasie, np. Playfair znajdującej się w pliku Playfair.java.

Stwórzmy metodę, która przyjmie słowo bazowe i na jego podstawie wygeneruje odpowiedni klucz.

Linia 1. prawy ukośnik prawy ukośnik Metoda do stworzenia klucza na podstawie słowa bazowego. Linia 2. public static String przetwarzajKlucz otwórz nawias okrągły String klucz zamknij nawias okrągły otwórz nawias klamrowy. Linia 3. prawy ukośnik prawy ukośnik Upewnijmy się przecinek że klucz będzie spełniał nasze warunki. Linia 4. if otwórz nawias okrągły klucz kropka length otwórz nawias okrągły zamknij nawias okrągły zamknij nawias ostrokątny 25 zamknij nawias okrągły. Linia 5. klucz znak równości klucz kropka substring otwórz nawias okrągły 0 przecinek 25 zamknij nawias okrągły średnik. Linia 6. zamknij nawias klamrowy.
Ważne!

Konieczne jest stworzenie alfabetu, który będzie używany w kluczu. W celu zmniejszenia liczby liter do 25, zamiast standardowej zamiany liter J na I wykorzystamy litery alfabetu łacińskiego bez litery Q. Możemy ją pominąć, ponieważ nie jest ona stosowana w języku polskim, a dzięki temu nie utracimy informacji o wystąpieniu litery J. Ważne jest upewnienie się, że wszystkie litery słowa bazowego są wielkimi literami.

Szyfr Playfair często jest implementowany z uwspólnieniem liter I oraz J, jednak nie jest to obowiązkowe kryterium. Kluczowe natomiast jest to, aby stosowany alfabet składał się z 25 znaków, co jest wymagane do stworzenia tablicy szyfrującej o rozmiarze 5 × 5. Oznacza to, że możemy uwspólnić inne litery niż I i J lub zrezygnować z używania danej litery (oczywiście pod warunkiem zachowania wymaganej liczby liter w alfabecie), bez negatywnego wpływu na działanie algorytmu.

Linia 1. prawy ukośnik prawy ukośnik Metoda do stworzenia klucza na podstawie słowa bazowego. Linia 2. public static String przetwarzajKlucz otwórz nawias okrągły String klucz zamknij nawias okrągły otwórz nawias klamrowy. Linia 3. prawy ukośnik prawy ukośnik Upewnijmy się przecinek że klucz będzie spełniał nasze warunki. Linia 4. if otwórz nawias okrągły klucz kropka length otwórz nawias okrągły zamknij nawias okrągły zamknij nawias ostrokątny 25 zamknij nawias okrągły. Linia 5. klucz znak równości klucz kropka substring otwórz nawias okrągły 0 przecinek 25 zamknij nawias okrągły średnik. Linia 7. prawy ukośnik prawy ukośnik Stwórzmy używany przez nas alfabet. Linia 8. StringBuilder alfabet znak równości new StringBuilder otwórz nawias okrągły zamknij nawias okrągły średnik. Linia 9. 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 10. if otwórz nawias okrągły i wykrzyknik znak równości apostrof Q apostrof zamknij nawias okrągły. Linia 11. alfabet kropka append otwórz nawias okrągły i zamknij nawias okrągły średnik. Linia 13. klucz znak równości klucz kropka toUpperCase otwórz nawias okrągły zamknij nawias okrągły średnik. Linia 14. zamknij nawias klamrowy.

Teraz dodajemy – bez powtórzeń – wszystkie litery ze słowa bazowego do klucza, a następnie dopełniamy klucz pozostałymi literami z utworzonego wcześniej alfabetu. Na koniec zwracamy gotowy klucz.

Linia 1. prawy ukośnik prawy ukośnik Metoda do stworzenia klucza na podstawie słowa bazowego. Linia 2. public static String przetwarzajKlucz otwórz nawias okrągły String klucz zamknij nawias okrągły otwórz nawias klamrowy. Linia 3. prawy ukośnik prawy ukośnik Upewnijmy się przecinek że klucz będzie spełniał nasze warunki. Linia 4. if otwórz nawias okrągły klucz kropka length otwórz nawias okrągły zamknij nawias okrągły zamknij nawias ostrokątny 25 zamknij nawias okrągły. Linia 5. klucz znak równości klucz kropka substring otwórz nawias okrągły 0 przecinek 25 zamknij nawias okrągły średnik. Linia 7. prawy ukośnik prawy ukośnik Stwórzmy używany przez nas alfabet. Linia 8. StringBuilder alfabet znak równości new StringBuilder otwórz nawias okrągły zamknij nawias okrągły średnik. Linia 9. 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 10. if otwórz nawias okrągły i wykrzyknik znak równości apostrof Q apostrof zamknij nawias okrągły. Linia 11. alfabet kropka append otwórz nawias okrągły i zamknij nawias okrągły średnik. Linia 13. klucz znak równości klucz kropka toUpperCase otwórz nawias okrągły zamknij nawias okrągły średnik. Linia 15. StringBuilder przetworzonyKlucz znak równości new StringBuilder otwórz nawias okrągły zamknij nawias okrągły średnik. Linia 16. prawy ukośnik prawy ukośnik Dodajmy do klucza znaki ze słowa bazowego. Linia 17. for otwórz nawias okrągły char x dwukropek klucz kropka toCharArray otwórz nawias okrągły zamknij nawias okrągły zamknij nawias okrągły. Linia 18. if otwórz nawias okrągły alfabet kropka toString otwórz nawias okrągły zamknij nawias okrągły kropka indexOf otwórz nawias okrągły x zamknij nawias okrągły wykrzyknik znak równości minus 1 ampersant ampersant przetworzonyKlucz kropka toString otwórz nawias okrągły zamknij nawias okrągły kropka indexOf otwórz nawias okrągły x zamknij nawias okrągły znak równości znak równości minus 1 zamknij nawias okrągły. Linia 19. przetworzonyKlucz kropka append otwórz nawias okrągły x zamknij nawias okrągły średnik. Linia 21. prawy ukośnik prawy ukośnik Teraz dopełnijmy klucz pozostałymi literami alfabetu. Linia 22. for otwórz nawias okrągły char x dwukropek alfabet kropka toString otwórz nawias okrągły zamknij nawias okrągły kropka toCharArray otwórz nawias okrągły zamknij nawias okrągły zamknij nawias okrągły. Linia 23. if otwórz nawias okrągły przetworzonyKlucz kropka toString otwórz nawias okrągły zamknij nawias okrągły kropka indexOf otwórz nawias okrągły x zamknij nawias okrągły znak równości znak równości minus 1 zamknij nawias okrągły. Linia 24. przetworzonyKlucz kropka append otwórz nawias okrągły x zamknij nawias okrągły średnik. Linia 26. return przetworzonyKlucz kropka toString otwórz nawias okrągły zamknij nawias okrągły średnik. Linia 27. zamknij nawias klamrowy.

Szyfrowanie tekstu

Kodowanie tekstu za pomocą szyfru Playfair zaczynamy od podzielenia tego tekstu na pary liter (jeżeli ich liczba jest nieparzysta, na koniec dodamy literę X). W zależności od ich pozycji w kluczu otrzymujemy trzy przypadki:

  • Litery znajdujące się w tym samym wierszu przesuwamy o jedną komórkę w prawo, w razie potrzeby wracając do początku wiersza (ale nie zmieniając kolumny!). Przykładowo, para liter CE dla naszego klucza staje się parą DH.

  • Litery znajdujące się w tej samej kolumnie przesuwamy o jedną komórkę w dół, w razie potrzeby wracając do początku kolumny (ale nie zmieniając wiersza!). Przykładowo, para liter SC dla klucza staje się parą OJ.

  • Litery znajdujące się w różnych wierszach i kolumnach traktujemy jako końce przekątnej prostokąta. Wierzchołki drugiej przekątnej tego prostokąta będą zaszyfrowaną parą. Przykładowo, para liter GN dla naszego klucza staje się parą KM.

Zaimplementujmy teraz naszą metodę. Będzie ona zwracała zaszyfrowany tekst, a przyjmowała tekst do zaszyfrowania wraz z kluczem – wszystkie wartości będą typu String. Na początku musimy się upewnić, że liczba znaków w tekście do zaszyfrowania jest parzysta.

Linia 1. public static String szyfruj otwórz nawias okrągły String wiadomosc przecinek String klucz zamknij nawias okrągły otwórz nawias klamrowy. Linia 2. if otwórz nawias okrągły wiadomosc kropka length otwórz nawias okrągły zamknij nawias okrągły procent 2 znak równości znak równości 1 zamknij nawias okrągły otwórz nawias klamrowy. Linia 3. wiadomosc znak równości wiadomosc plus cudzysłów X cudzysłów średnik. Linia 4. zamknij nawias klamrowy. Linia 5. zamknij nawias klamrowy.

Teraz utwórzmy zmienną, w której będziemy przechowywali zaszyfrowany tekst. Tworzymy również pętlę, która przejdzie po wszystkich parach znaków w tekście do zaszyfrowania.

Linia 1. public static String szyfruj otwórz nawias okrągły String wiadomosc przecinek String klucz zamknij nawias okrągły otwórz nawias klamrowy. Linia 2. if otwórz nawias okrągły wiadomosc kropka length otwórz nawias okrągły zamknij nawias okrągły procent 2 znak równości znak równości 1 zamknij nawias okrągły otwórz nawias klamrowy. Linia 3. wiadomosc znak równości wiadomosc plus cudzysłów X cudzysłów średnik. Linia 4. zamknij nawias klamrowy. Linia 6. StringBuilder wynik znak równości new StringBuilder otwórz nawias okrągły zamknij nawias okrągły średnik. Linia 7. prawy ukośnik prawy ukośnik Rozpatrujemy pary liczb przecinek dlatego zmienną zwiększamy o 2. Linia 8. for otwórz nawias okrągły 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 10. zamknij nawias klamrowy. Linia 11. zamknij nawias klamrowy.

Dla obu liter w parze znajdujemy ich pozycję w kluczu.

Linia 1. public static String szyfruj otwórz nawias okrągły String wiadomosc przecinek String klucz zamknij nawias okrągły otwórz nawias klamrowy. Linia 2. if otwórz nawias okrągły wiadomosc kropka length otwórz nawias okrągły zamknij nawias okrągły procent 2 znak równości znak równości 1 zamknij nawias okrągły otwórz nawias klamrowy. Linia 3. wiadomosc znak równości wiadomosc plus cudzysłów X cudzysłów średnik. Linia 4. zamknij nawias klamrowy. Linia 6. StringBuilder wynik znak równości new StringBuilder otwórz nawias okrągły zamknij nawias okrągły średnik. Linia 7. prawy ukośnik prawy ukośnik Rozpatrujemy pary liczb przecinek dlatego zmienną zwiększamy o 2. Linia 8. for otwórz nawias okrągły 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 9. prawy ukośnik prawy ukośnik Znajdźmy pozycje liter w naszym kluczu. Linia 10. int otwórz nawias kwadratowy zamknij nawias kwadratowy row znak równości otwórz nawias klamrowy. Linia 11. klucz kropka indexOf otwórz nawias okrągły wiadomosc kropka charAt otwórz nawias okrągły i zamknij nawias okrągły zamknij nawias okrągły prawy ukośnik 5 przecinek. Linia 12. klucz kropka indexOf otwórz nawias okrągły wiadomosc kropka charAt otwórz nawias okrągły i plus 1 zamknij nawias okrągły zamknij nawias okrągły prawy ukośnik 5. Linia 13. zamknij nawias klamrowy średnik. Linia 14. int otwórz nawias kwadratowy zamknij nawias kwadratowy col znak równości otwórz nawias klamrowy. Linia 15. klucz kropka indexOf otwórz nawias okrągły wiadomosc kropka charAt otwórz nawias okrągły i zamknij nawias okrągły zamknij nawias okrągły procent 5 przecinek. Linia 16. klucz kropka indexOf otwórz nawias okrągły wiadomosc kropka charAt otwórz nawias okrągły i plus 1 zamknij nawias okrągły zamknij nawias okrągły procent 5. Linia 17. zamknij nawias klamrowy średnik. Linia 18. zamknij nawias klamrowy. Linia 19. zamknij nawias klamrowy.

Zgodnie z omówionymi wcześniej zasadami, do zaszyfrowanego tekstu dodajemy parę odpowiednio przekształconych znaków. Na końcu funkcji zwracamy jeszcze zaszyfrowany tekst.

Linia 1. public static String szyfruj otwórz nawias okrągły String wiadomosc przecinek String klucz zamknij nawias okrągły otwórz nawias klamrowy. Linia 2. if otwórz nawias okrągły wiadomosc kropka length otwórz nawias okrągły zamknij nawias okrągły procent 2 znak równości znak równości 1 zamknij nawias okrągły otwórz nawias klamrowy. Linia 3. wiadomosc znak równości wiadomosc plus cudzysłów X cudzysłów średnik. Linia 4. zamknij nawias klamrowy. Linia 6. StringBuilder wynik znak równości new StringBuilder otwórz nawias okrągły zamknij nawias okrągły średnik. Linia 7. prawy ukośnik prawy ukośnik Rozpatrujemy pary liczb przecinek dlatego zmienną zwiększamy o 2. Linia 8. for otwórz nawias okrągły 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 9. prawy ukośnik prawy ukośnik Znajdźmy pozycje liter w naszym kluczu. Linia 10. int otwórz nawias kwadratowy zamknij nawias kwadratowy row znak równości otwórz nawias klamrowy. Linia 11. klucz kropka indexOf otwórz nawias okrągły wiadomosc kropka charAt otwórz nawias okrągły i zamknij nawias okrągły zamknij nawias okrągły prawy ukośnik 5 przecinek. Linia 12. klucz kropka indexOf otwórz nawias okrągły wiadomosc kropka charAt otwórz nawias okrągły i plus 1 zamknij nawias okrągły zamknij nawias okrągły prawy ukośnik 5. Linia 13. zamknij nawias klamrowy średnik. Linia 14. int otwórz nawias kwadratowy zamknij nawias kwadratowy col znak równości otwórz nawias klamrowy. Linia 15. klucz kropka indexOf otwórz nawias okrągły wiadomosc kropka charAt otwórz nawias okrągły i zamknij nawias okrągły zamknij nawias okrągły procent 5 przecinek. Linia 16. klucz kropka indexOf otwórz nawias okrągły wiadomosc kropka charAt otwórz nawias okrągły i plus 1 zamknij nawias okrągły zamknij nawias okrągły procent 5. Linia 17. zamknij nawias klamrowy średnik. Linia 19. prawy ukośnik prawy ukośnik Litery w tej samej kolumnie przesuwamy o 1 w dół. Linia 20. 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 21. wynik kropka append otwórz nawias okrągły klucz kropka charAt otwórz nawias okrągły 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 okrągły zamknij nawias okrągły średnik. Linia 22. wynik kropka append otwórz nawias okrągły klucz kropka charAt otwórz nawias okrągły 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 okrągły zamknij nawias okrągły średnik. Linia 23. zamknij nawias klamrowy. Linia 24. prawy ukośnik prawy ukośnik Litery w tym samym wierszu przesuwamy o 1 w prawo. Linia 25. 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 26. wynik kropka append otwórz nawias okrągły klucz kropka charAt otwórz nawias okrągły 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 okrągły zamknij nawias okrągły średnik. Linia 27. wynik kropka append otwórz nawias okrągły klucz kropka charAt otwórz nawias okrągły 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 okrągły zamknij nawias okrągły średnik. Linia 28. zamknij nawias klamrowy. Linia 29. prawy ukośnik prawy ukośnik Litery w różnych wierszach i kolumnach bierzemy cudzysłów na krzyż cudzysłów. Linia 30. else otwórz nawias klamrowy. Linia 31. wynik kropka append otwórz nawias okrągły klucz kropka charAt otwórz nawias okrągły row otwórz nawias kwadratowy 1 zamknij nawias kwadratowy asterysk 5 plus col otwórz nawias kwadratowy 0 zamknij nawias kwadratowy zamknij nawias okrągły zamknij nawias okrągły średnik. Linia 32. wynik kropka append otwórz nawias okrągły klucz kropka charAt otwórz nawias okrągły row otwórz nawias kwadratowy 0 zamknij nawias kwadratowy asterysk 5 plus col otwórz nawias kwadratowy 1 zamknij nawias kwadratowy zamknij nawias okrągły zamknij nawias okrągły średnik. Linia 33. zamknij nawias klamrowy. Linia 34. zamknij nawias klamrowy. Linia 35. return wynik kropka toString otwórz nawias okrągły zamknij nawias okrągły średnik. Linia 36. zamknij nawias klamrowy.

Odszyfrowywanie tekstu

Aby odszyfrować tekst, postępujemy zgodnie z algorytmem szyfrowania, z tą różnicą, że zamiast przesuwać litery w dół i prawo, będziemy je przesuwali odpowiednio w górę i w lewo. Dla sytuacji, w której litery znajdują się w różnych wierszach i kolumnach, algorytm się nie zmienia.

Ten fakt możemy wykorzystać do stworzenia bardzo prostego sposobu na odszyfrowanie tekstu. Wystarczy, że przekształcimy klucz poprzez symetrię względem punktu środkowego. Ponieważ klucz przechowujemy w zmiennej typu String, wystarczy, że przekażemy go do metody szyfrującej w kolejności odwróconej, a w rezultacie otrzymamy odszyfrowany tekst.

Zastosowane rozwiązanie zwiększy czytelność kodu, ponieważ nie będziemy kopiowali kodu z minimalnymi zmianami, tylko użyjemy istniejącej funkcji do zbudowania metody. Unikamy w ten sposób negatywnego zjawiska zwanego redundancjąredundancjaredundancją.

Ważne!

Klasa String nie posiada wbudowanej metody pozwalającej na jej odwrócenie. Właśnie dlatego stworzymy nowy obiekt klasy StringBuilder, podając do konstruktora klucz, a następnie – na utworzonym obiekcie – wywołując metodę reverse(). Ponieważ ta metoda zwraca obiekt klasy StringBuilder, na końcu wywołujemy jeszcze metodę toString().

Kod wygląda następująco:

Linia 1. prawy ukośnik prawy ukośnik Metoda do odkodowania wiadomości zaszyfrowanej za pomocą podanego klucza. Linia 2. public static String odszyfruj otwórz nawias okrągły String wiadomosc przecinek String klucz zamknij nawias okrągły otwórz nawias klamrowy. Linia 3. return szyfruj otwórz nawias okrągły wiadomosc przecinek new StringBuilder otwórz nawias okrągły klucz zamknij nawias okrągły kropka reverse otwórz nawias okrągły zamknij nawias okrągły kropka toString otwórz nawias okrągły zamknij nawias okrągły zamknij nawias okrągły średnik. Linia 4. zamknij nawias klamrowy.

Przykład użycia

A oto przykładowy kod demonstrujący działanie tych metod:

Linia 1. import java kropka util kropka Scanner średnik. Linia 3. public class Main otwórz nawias klamrowy. Linia 4. prawy ukośnik prawy ukośnik Metoda do stworzenia klucza na podstawie słowa bazowego. Linia 5. public static String przetwarzajKlucz otwórz nawias okrągły String klucz zamknij nawias okrągły otwórz nawias klamrowy. Linia 6. prawy ukośnik prawy ukośnik Upewnijmy się przecinek że klucz będzie spełniał nasze warunki. Linia 7. if otwórz nawias okrągły klucz kropka length otwórz nawias okrągły zamknij nawias okrągły zamknij nawias ostrokątny 25 zamknij nawias okrągły. Linia 8. klucz znak równości klucz kropka substring otwórz nawias okrągły 0 przecinek 25 zamknij nawias okrągły średnik. Linia 10. prawy ukośnik prawy ukośnik Stwórzmy używany przez nas alfabet. Linia 11. StringBuilder alfabet znak równości new StringBuilder otwórz nawias okrągły zamknij nawias okrągły średnik. Linia 12. 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 13. if otwórz nawias okrągły i wykrzyknik znak równości apostrof Q apostrof zamknij nawias okrągły. Linia 14. alfabet kropka append otwórz nawias okrągły i zamknij nawias okrągły średnik. Linia 16. klucz znak równości klucz kropka toUpperCase otwórz nawias okrągły zamknij nawias okrągły średnik. Linia 18. StringBuilder przetworzonyKlucz znak równości new StringBuilder otwórz nawias okrągły zamknij nawias okrągły średnik. Linia 19. prawy ukośnik prawy ukośnik Dodajmy do klucza znaki ze słowa bazowego. Linia 20. for otwórz nawias okrągły char x dwukropek klucz kropka toCharArray otwórz nawias okrągły zamknij nawias okrągły zamknij nawias okrągły. Linia 21. if otwórz nawias okrągły alfabet kropka toString otwórz nawias okrągły zamknij nawias okrągły kropka indexOf otwórz nawias okrągły x zamknij nawias okrągły wykrzyknik znak równości minus 1 ampersant ampersant przetworzonyKlucz kropka toString otwórz nawias okrągły zamknij nawias okrągły kropka indexOf otwórz nawias okrągły x zamknij nawias okrągły znak równości znak równości minus 1 zamknij nawias okrągły. Linia 22. przetworzonyKlucz kropka append otwórz nawias okrągły x zamknij nawias okrągły średnik. Linia 24. prawy ukośnik prawy ukośnik Teraz dopełnijmy klucz pozostałymi literami alfabetu. Linia 25. for otwórz nawias okrągły char x dwukropek alfabet kropka toString otwórz nawias okrągły zamknij nawias okrągły kropka toCharArray otwórz nawias okrągły zamknij nawias okrągły zamknij nawias okrągły. Linia 26. if otwórz nawias okrągły przetworzonyKlucz kropka toString otwórz nawias okrągły zamknij nawias okrągły kropka indexOf otwórz nawias okrągły x zamknij nawias okrągły znak równości znak równości minus 1 zamknij nawias okrągły. Linia 27. przetworzonyKlucz kropka append otwórz nawias okrągły x zamknij nawias okrągły średnik. Linia 29. return przetworzonyKlucz kropka toString otwórz nawias okrągły zamknij nawias okrągły średnik. Linia 30. zamknij nawias klamrowy. Linia 32. prawy ukośnik prawy ukośnik Metoda do zakodowania podanej wiadomości przy pomocy klucza. Linia 33. public static String szyfruj otwórz nawias okrągły String wiadomosc przecinek String klucz zamknij nawias okrągły otwórz nawias klamrowy. Linia 34. if otwórz nawias okrągły wiadomosc kropka length otwórz nawias okrągły zamknij nawias okrągły procent 2 znak równości znak równości 1 zamknij nawias okrągły otwórz nawias klamrowy. Linia 35. wiadomosc znak równości wiadomosc plus cudzysłów X cudzysłów średnik. Linia 36. zamknij nawias klamrowy. Linia 38. StringBuilder wynik znak równości new StringBuilder otwórz nawias okrągły zamknij nawias okrągły średnik. Linia 39. prawy ukośnik prawy ukośnik Rozpatrujemy pary liczb przecinek dlatego zmienną zwiększamy o 2. Linia 40. for otwórz nawias okrągły 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 41. prawy ukośnik prawy ukośnik Znajdźmy pozycje liter w naszym kluczu. Linia 42. int otwórz nawias kwadratowy zamknij nawias kwadratowy row znak równości otwórz nawias klamrowy. Linia 43. klucz kropka indexOf otwórz nawias okrągły wiadomosc kropka charAt otwórz nawias okrągły i zamknij nawias okrągły zamknij nawias okrągły prawy ukośnik 5 przecinek. Linia 44. klucz kropka indexOf otwórz nawias okrągły wiadomosc kropka charAt otwórz nawias okrągły i plus 1 zamknij nawias okrągły zamknij nawias okrągły prawy ukośnik 5. Linia 45. zamknij nawias klamrowy średnik. Linia 46. int otwórz nawias kwadratowy zamknij nawias kwadratowy col znak równości otwórz nawias klamrowy. Linia 47. klucz kropka indexOf otwórz nawias okrągły wiadomosc kropka charAt otwórz nawias okrągły i zamknij nawias okrągły zamknij nawias okrągły procent 5 przecinek. Linia 48. klucz kropka indexOf otwórz nawias okrągły wiadomosc kropka charAt otwórz nawias okrągły i plus 1 zamknij nawias okrągły zamknij nawias okrągły procent 5. Linia 49. zamknij nawias klamrowy średnik. Linia 51. prawy ukośnik prawy ukośnik Litery w tej samej kolumnie przesuwamy o 1 w dół. Linia 52. 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 53. wynik kropka append otwórz nawias okrągły klucz kropka charAt otwórz nawias okrągły 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 okrągły zamknij nawias okrągły średnik. Linia 54. wynik kropka append otwórz nawias okrągły klucz kropka charAt otwórz nawias okrągły 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 okrągły zamknij nawias okrągły średnik. Linia 55. zamknij nawias klamrowy. Linia 56. prawy ukośnik prawy ukośnik Litery w tym samym wierszu przesuwamy o 1 w prawo. Linia 57. 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 58. wynik kropka append otwórz nawias okrągły klucz kropka charAt otwórz nawias okrągły 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 okrągły zamknij nawias okrągły średnik. Linia 59. wynik kropka append otwórz nawias okrągły klucz kropka charAt otwórz nawias okrągły 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 okrągły zamknij nawias okrągły średnik. Linia 60. zamknij nawias klamrowy. Linia 61. prawy ukośnik prawy ukośnik Litery w różnych wierszach i kolumnach bierzemy cudzysłów na krzyż cudzysłów. Linia 62. else otwórz nawias klamrowy. Linia 63. wynik kropka append otwórz nawias okrągły klucz kropka charAt otwórz nawias okrągły row otwórz nawias kwadratowy 1 zamknij nawias kwadratowy asterysk 5 plus col otwórz nawias kwadratowy 0 zamknij nawias kwadratowy zamknij nawias okrągły zamknij nawias okrągły średnik. Linia 64. wynik kropka append otwórz nawias okrągły klucz kropka charAt otwórz nawias okrągły row otwórz nawias kwadratowy 0 zamknij nawias kwadratowy asterysk 5 plus col otwórz nawias kwadratowy 1 zamknij nawias kwadratowy zamknij nawias okrągły zamknij nawias okrągły średnik. Linia 65. zamknij nawias klamrowy. Linia 66. zamknij nawias klamrowy. Linia 67. return wynik kropka toString otwórz nawias okrągły zamknij nawias okrągły średnik. Linia 68. zamknij nawias klamrowy. Linia 70. prawy ukośnik prawy ukośnik Metoda do odkodowania wiadomości zaszyfrowanej za pomocą podanego klucza. Linia 71. public static String odszyfruj otwórz nawias okrągły String wiadomosc przecinek String klucz zamknij nawias okrągły otwórz nawias klamrowy. Linia 72. return szyfruj otwórz nawias okrągły wiadomosc przecinek new StringBuilder otwórz nawias okrągły klucz zamknij nawias okrągły kropka reverse otwórz nawias okrągły zamknij nawias okrągły kropka toString otwórz nawias okrągły zamknij nawias okrągły zamknij nawias okrągły średnik. Linia 73. zamknij nawias klamrowy. Linia 75. 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 76. Scanner sc znak równości new Scanner otwórz nawias okrągły System kropka in zamknij nawias okrągły średnik. Linia 77. System kropka out kropka println otwórz nawias okrągły cudzysłów Podaj klucz do szyfru dwukropek cudzysłów zamknij nawias okrągły średnik. Linia 78. String klucz średnik. Linia 79. klucz znak równości sc kropka nextLine otwórz nawias okrągły zamknij nawias okrągły średnik. Linia 80. klucz znak równości przetwarzajKlucz otwórz nawias okrągły klucz zamknij nawias okrągły średnik. Linia 82. System kropka out kropka println otwórz nawias okrągły cudzysłów Podaj tekst do zaszyfrowania dwukropek cudzysłów zamknij nawias okrągły średnik. Linia 83. String wiadomosc średnik. Linia 84. wiadomosc znak równości sc kropka nextLine otwórz nawias okrągły zamknij nawias okrągły średnik. Linia 85. wiadomosc znak równości wiadomosc kropka toUpperCase otwórz nawias okrągły zamknij nawias okrągły średnik. Linia 87. System kropka out kropka println otwórz nawias okrągły cudzysłów Do szyfrowania zostanie uzyty nastepujacy klucz dwukropek cudzysłów zamknij nawias okrągły średnik. Linia 88. 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 89. System kropka out kropka print otwórz nawias okrągły klucz kropka charAt otwórz nawias okrągły i zamknij nawias okrągły zamknij nawias okrągły średnik. Linia 90. 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 91. System kropka out kropka println otwórz nawias okrągły zamknij nawias okrągły średnik. Linia 92. zamknij nawias klamrowy. Linia 93. System kropka out kropka println otwórz nawias okrągły zamknij nawias okrągły średnik. Linia 95. System kropka out kropka println otwórz nawias okrągły cudzysłów Zaszyfrowany tekst to dwukropek cudzysłów zamknij nawias okrągły średnik. Linia 96. System kropka out kropka println otwórz nawias okrągły 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 plus cudzysłów lewy ukośnik n cudzysłów zamknij nawias okrągły średnik. Linia 98. System kropka out kropka println otwórz nawias okrągły cudzysłów Po przetworzeniu przez algorytm odszyfrowania otrzymujemy dwukropek cudzysłów zamknij nawias okrągły średnik. Linia 99. System kropka out kropka println otwórz nawias okrągły odszyfruj otwórz nawias okrągły wiadomosc przecinek klucz zamknij nawias okrągły zamknij nawias okrągły średnik. Linia 100. zamknij nawias klamrowy. Linia 101. zamknij nawias klamrowy.

Słownik

redundancja
redundancja

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