Szyfr płotkowy jest rodzajem szyfru przestawieniowego. Kluczem szyfrowania jest liczba naturalna, która określa, w ilu wierszach zapisujemy tekst jawny. Tworzenie szyfrogramuszyfrogramszyfrogramu polega na zapisaniu liter tekstu jawnego zygzakiem, w dół i w górę, pomiędzy najwyższym i najniższym poziomem wymyślonego płotka o zadanej wysokości, która będzie jednocześnie tajnym kluczem. Następnie odczytujemy zapisane litery kolejno wierszami, aby zapisać je w jednej linii, tworząc szyfrogram wiadomości.

1
Przykład 1

Korzystając z szyfru płotkowego, zakodujemy przykładową wiadomość NIHILNOVI, przyjmując wartość klucza równą 3.

Przykładowe szyfrowanie:

Najpierw zapiszemy litery zygzakiem. Liczba wierszy jest równa wartości klucza, a więc w tym przypadku 3.

Linia 1. N kropka kropka kropka kropka kropka kropka kropka L kropka kropka kropka kropka kropka kropka kropka I. Linia 2. kropka kropka I kropka kropka kropka I kropka kropka kropka N kropka kropka kropka V. Linia 3. kropka kropka kropka kropka H kropka kropka kropka kropka kropka kropka kropka O.

Potem litery odczytujemy wierszami, rozpoczynając od pierwszego.

  • pierwszy wiersz zawiera litery: NLI,

  • drugi wiersz zawiera litery: IINV,

  • trzeci wiersz zawiera litery: HO.

Po zakończeniu dla podanego tekstu otrzymamy szyfrogram:

Linia 1. NLI IIN VHO.

Przygotujemy funkcję szyfrującą tekst metodą płotkową.

Specyfikacja problemu:

Dane:

  • slowo – łańcuch znaków; wiadomość do zaszyfrowania

  • klucz – liczba naturalna > 1

Wynik:

  • szyfrogram – łańcuch znaków; zaszyfrowana wiadomość

Linia 1. def szyfruj podkreślnik slowo otwórz nawias okrągły slowo przecinek klucz znak równości 5 zamknij nawias okrągły dwukropek. Linia 2. kratka test typu danych wejściowych. Linia 3. if type otwórz nawias okrągły slowo zamknij nawias okrągły is not str dwukropek. Linia 4. return False. Linia 6. if klucz otwórz nawias ostrokątny 2 dwukropek. Linia 7. return False. Linia 9. kratka Krok 1 kropka Usuwamy spacje i zmieniamy wszystkie litery na WIELKIE. Linia 10. tekst podkreślnik jawny znak równości cudzysłów cudzysłów kropka join otwórz nawias okrągły otwórz nawias kwadratowy litera kropka upper otwórz nawias okrągły zamknij nawias okrągły for litera in slowo if litera wykrzyknik znak równości cudzysłów cudzysłów zamknij nawias kwadratowy zamknij nawias okrągły. Linia 12. kratka Krok 2 kropka Tworzymy listę list minus płotek kropka. Linia 13. liczba podkreślnik znakow znak równości len otwórz nawias okrągły tekst podkreślnik jawny zamknij nawias okrągły. Linia 14. plotek znak równości otwórz nawias kwadratowy otwórz nawias kwadratowy cudzysłów cudzysłów for podkreślnik in range otwórz nawias okrągły klucz zamknij nawias okrągły zamknij nawias kwadratowy for podkreślnik in range otwórz nawias okrągły liczba podkreślnik znakow zamknij nawias okrągły zamknij nawias kwadratowy. Linia 16. kratka Krok 3 kropka Rozmieszczamy kolejne znaki w listach. Linia 17. kratka flaga kierunek znak równości 1 minus wypełniamy płotek w dół. Linia 18. kratka flaga kierunek znak równości minus 1 minus wypełniamy płotek w górę. Linia 20. kierunek znak równości 1 kratka rozpoczynamy wypełnianie z góry na dół. Linia 21. indeks znak równości 0 kratka indeks kolejnego znaku jest wykorzystywany jako indeks pierwszej listy. Linia 22. wiersz znak równości 0 kratka nr wiersza przecinek w którym aktualnie wstawiamy znak. Linia 23. kratka gdy osiągniemy ostatni wiersz otwórz nawias okrągły zależy od wartości parametru klucz zamknij nawias okrągły. Linia 24. kratka zmieniamy wartość zmiennej flaga. Linia 25. while tekst podkreślnik jawny dwukropek. Linia 26. znak podkreślnik tekstu znak równości tekst podkreślnik jawny otwórz nawias kwadratowy 0 zamknij nawias kwadratowy kratka pierwszy znak. Linia 27. plotek otwórz nawias kwadratowy indeks zamknij nawias kwadratowy otwórz nawias kwadratowy wiersz zamknij nawias kwadratowy znak równości znak podkreślnik tekstu. Linia 28. indeks plus znak równości 1. Linia 30. kratka teraz sprawdzamy warunek dla flagi. Linia 31. if wiersz znak równości znak równości klucz minus 1 dwukropek kratka w pythonie indeks zaczynamy liczyć od zera przecinek więc ostatni minus 1. Linia 32. kierunek znak równości minus 1. Linia 33. elif wiersz znak równości znak równości 0 dwukropek. Linia 34. kierunek znak równości 1. Linia 36. kratka teraz w zależności od flagi zwiększamy lub zmniejszamy. Linia 37. wiersz plus znak równości kierunek. Linia 39. kratka przepisujemy resztę tekstu. Linia 40. tekst podkreślnik jawny znak równości tekst podkreślnik jawny otwórz nawias kwadratowy 1 dwukropek zamknij nawias kwadratowy kratka reszta jawnego tekstu przecinek bez pierwszego znaku. Linia 43. kratka Krok 4 kropka odczytujemy zaszyfrowaną wiadomość. Linia 44. szyfrogram znak równości cudzysłów cudzysłów. Linia 45. for wiersz in range otwórz nawias okrągły klucz zamknij nawias okrągły dwukropek. Linia 46. for wiersz podkreślnik plotka in plotek dwukropek. Linia 47. znak znak równości wiersz podkreślnik plotka otwórz nawias kwadratowy wiersz zamknij nawias kwadratowy. Linia 48. if znak wykrzyknik znak równości cudzysłów cudzysłów dwukropek kratka jeśli mamy znak zamiast spacji. Linia 49. szyfrogram plus znak równości znak kratka dodajemy go do szyfrogramu. Linia 51. kratka Zwracamy rezultat. Linia 52. return szyfrogram.

Wynik działania funkcji:

Linia 1. print otwórz nawias okrągły szyfruj podkreślnik slowo otwórz nawias okrągły cudzysłów NIHILNOVI cudzysłów przecinek 2 zamknij nawias okrągły zamknij nawias okrągły. Linia 2. print otwórz nawias okrągły szyfruj podkreślnik slowo otwórz nawias okrągły cudzysłów NIHILNOVI cudzysłów przecinek 3 zamknij nawias okrągły zamknij nawias okrągły. Linia 3. print otwórz nawias okrągły szyfruj podkreślnik slowo otwórz nawias okrągły cudzysłów NIHILNOVI cudzysłów przecinek 4 zamknij nawias okrągły zamknij nawias okrągły. Linia 4. print otwórz nawias okrągły szyfruj podkreślnik slowo otwórz nawias okrągły cudzysłów NIHILNOVI cudzysłów przecinek 5 zamknij nawias okrągły zamknij nawias okrągły. Linia 5. print otwórz nawias okrągły szyfruj podkreślnik slowo otwórz nawias okrągły cudzysłów NIHILNOVI cudzysłów przecinek 6 zamknij nawias okrągły zamknij nawias okrągły. Linia 6. print otwórz nawias okrągły szyfruj podkreślnik slowo otwórz nawias okrągły cudzysłów NIHILNOVI cudzysłów przecinek 1 zamknij nawias okrągły zamknij nawias okrągły. Linia 7. print otwórz nawias okrągły szyfruj podkreślnik slowo otwórz nawias okrągły cudzysłów NIHILNOVI cudzysłów przecinek minus 3 zamknij nawias okrągły zamknij nawias okrągły. Linia 8. print otwórz nawias okrągły szyfruj podkreślnik slowo otwórz nawias okrągły 123 przecinek 6 zamknij nawias okrągły zamknij nawias okrągły. Linia 10. kratka NHLOIIINV. Linia 11. kratka NLIIINVHO. Linia 12. kratka NOINVHLII. Linia 13. kratka NIIVHOINL. Linia 14. kratka NIHIIVLON. Linia 15. kratka False. Linia 16. kratka False. Linia 17. kratka False.

Stwórzmy funkcję deszyfrującą zaszyfrowany tekst metodą płotkową.

Specyfikacja problemu:

Dane:

  • szyfrogram – łańcuch znaków; wiadomość do zaszyfrowania

  • klucz – liczba naturalna > 1

Wynik:

  • jawny_tekst – łańcuch znaków; odszyfrowana wiadomość

Linia 1. def odszyfruj podkreślnik slowo otwórz nawias okrągły szyfrogram przecinek klucz zamknij nawias okrągły dwukropek. Linia 2. kratka test typu danych wejściowych. Linia 3. if type otwórz nawias okrągły szyfrogram zamknij nawias okrągły is not str dwukropek. Linia 4. return False. Linia 6. if klucz otwórz nawias ostrokątny 2 dwukropek. Linia 7. return False. Linia 9. kratka Odszyfrowywuje słowo na podstawie klucza. Linia 11. kratka Przechowujemy informację o długości szyfrogramu. Linia 12. kratka Będziemy wykorzystywać ją w pętli while kropka kropka kropka przy uzupełnianiu słowa. Linia 13. szyfrogram podkreślnik len znak równości len otwórz nawias okrągły szyfrogram zamknij nawias okrągły. Linia 14. jawny podkreślnik tekst znak równości cudzysłów cudzysłów kratka Odszyfrowane słowo. Linia 15. kratka przygotowujemy listę list dla znaków szyfrogramu. Linia 16. plotek znak równości otwórz nawias kwadratowy otwórz nawias kwadratowy cudzysłów minus cudzysłów for podkreślnik in range otwórz nawias okrągły klucz zamknij nawias okrągły zamknij nawias kwadratowy for podkreślnik in range otwórz nawias okrągły szyfrogram podkreślnik len zamknij nawias okrągły zamknij nawias kwadratowy. Linia 19. kratka Wypełniamy listę asterysk w miejscach liter. Linia 20. kratka flaga kierunek znak równości 1 minus wypełniamy płotek w dół. Linia 21. kratka flaga kierunek znak równości minus 1 minus wypełniamy płotek w górę. Linia 23. kierunek znak równości 1 kratka rozpoczynamy wypełnianie z góry na dół. Linia 24. indeks znak równości 0 kratka indeks kolejnego znaku jest wykorzystywany jako indeks pierwszej listy. Linia 25. wiersz znak równości 0 kratka nr wiersza przecinek w którym aktualnie wstawiamy znak. Linia 26. ile podkreślnik znakow znak równości szyfrogram podkreślnik len. Linia 27. kratka gdy osiągniemy ostatni wiersz otwórz nawias okrągły zależy od wartości parametru klucz zamknij nawias okrągły. Linia 28. kratka zmieniamy wartość zmiennej flaga. Linia 29. while ile podkreślnik znakow dwukropek. Linia 30. plotek otwórz nawias kwadratowy indeks zamknij nawias kwadratowy otwórz nawias kwadratowy wiersz zamknij nawias kwadratowy znak równości cudzysłów asterysk cudzysłów. Linia 31. indeks plus znak równości 1. Linia 33. kratka teraz sprawdzamy warunek dla flagi. Linia 34. if wiersz znak równości znak równości klucz minus 1 dwukropek kratka w pythonie indeks zaczynamy liczyć od zera przecinek więc ostatni minus 1. Linia 35. kierunek znak równości minus 1. Linia 36. elif wiersz znak równości znak równości 0 dwukropek. Linia 37. kierunek znak równości 1. Linia 39. kratka teraz w zależności od flagi zwiększamy lub zmniejszamy. Linia 40. wiersz plus znak równości kierunek. Linia 42. kratka zmniejszamy wielkość ilość znaków o 1. Linia 43. ile podkreślnik znakow minus znak równości 1. Linia 45. kratka na kolejnych pozycjach gwiazdki wykładamy kolejne znaki. Linia 47. while szyfrogram dwukropek. Linia 48. for indeks in range otwórz nawias okrągły klucz zamknij nawias okrągły dwukropek. Linia 49. for wiersz in plotek dwukropek. Linia 50. kratka ponieważ musimy iterować tyle razy przecinek ile wynosi klucz przecinek. Linia 51. kratka natrafimy kilka razy na wiersz przecinek w którym znak cudzysłów asterysk cudzysłów zastąpiliśmy już. Linia 52. kratka literą z szyfogramu średnik wtedy wiersz kropka index otwórz nawias okrągły cudzysłów asterysk cudzysłów zamknij nawias okrągły zakończy się błędem. Linia 53. kratka stosujemy konstrukcję try przecinek aby nie przerwać skryptu błędem ValueError. Linia 54. try dwukropek. Linia 55. if wiersz kropka index otwórz nawias okrągły cudzysłów asterysk cudzysłów zamknij nawias okrągły znak równości znak równości indeks dwukropek kratka miejsce cudzysłów asterysk cudzysłów jest równe indeksowi klucza. Linia 56. wiersz otwórz nawias kwadratowy indeks zamknij nawias kwadratowy znak równości szyfrogram otwórz nawias kwadratowy 0 zamknij nawias kwadratowy kratka wpisujemy do niego literę. Linia 57. szyfrogram znak równości szyfrogram otwórz nawias kwadratowy 1 dwukropek zamknij nawias kwadratowy kratka pozostawiamy resztę szyfrogramu. Linia 58. except dwukropek. Linia 59. pass. Linia 60. kratka przechodzimy dalej bez jakiegokolwiek komunikatu na ekranie. Linia 61. kratka aby nie zniekształcać obrazu. Linia 63. kratka Uzupełniamy słowo analogicznie jak przy szyfrowaniu. Linia 64. kierunek znak równości 1 kratka rozpoczynamy wypełnianie z góry na dół. Linia 65. indeks znak równości 0 kratka indeks kolejnego znaku jest wykorzystywany jako indeks pierwszej listy. Linia 66. wiersz znak równości 0 kratka nr wiersza przecinek w którym aktualnie wstawiamy znak. Linia 67. ile podkreślnik znakow znak równości 0 kratka ile znakow odczytaliśmy przecinek porównujemy do szyfrogram podkreślnik len. Linia 68. kratka gdy osiągniemy ostatni wiersz otwórz nawias okrągły zależy od wartości parametru klucz zamknij nawias okrągły. Linia 69. kratka zmieniamy wartość zmiennej flaga. Linia 70. while ile podkreślnik znakow otwórz nawias ostrokątny szyfrogram podkreślnik len dwukropek. Linia 71. jawny podkreślnik tekst plus znak równości plotek otwórz nawias kwadratowy indeks zamknij nawias kwadratowy otwórz nawias kwadratowy wiersz zamknij nawias kwadratowy. Linia 72. indeks plus znak równości 1. Linia 74. kratka teraz sprawdzamy warunek dla flagi. Linia 75. if wiersz znak równości znak równości klucz minus 1 dwukropek kratka w pythonie indeks zaczynamy liczyć od zera przecinek więc ostatni minus 1. Linia 76. kierunek znak równości minus 1. Linia 77. elif wiersz znak równości znak równości 0 dwukropek. Linia 78. kierunek znak równości 1. Linia 80. kratka teraz w zależności od flagi zwiększamy lub zmniejszamy. Linia 81. wiersz plus znak równości kierunek. Linia 83. kratka zwiększamy ilość znaków zebranych. Linia 84. ile podkreślnik znakow plus znak równości 1. Linia 86. return jawny podkreślnik tekst.

Wynik działania funkcji:

Linia 1. print otwórz nawias okrągły odszyfruj podkreślnik slowo otwórz nawias okrągły cudzysłów NHLOIIINV cudzysłów przecinek 2 zamknij nawias okrągły zamknij nawias okrągły. Linia 2. print otwórz nawias okrągły odszyfruj podkreślnik slowo otwórz nawias okrągły cudzysłów NLIIINVHO cudzysłów przecinek 3 zamknij nawias okrągły zamknij nawias okrągły. Linia 3. print otwórz nawias okrągły odszyfruj podkreślnik slowo otwórz nawias okrągły cudzysłów NOINVHLII cudzysłów przecinek 4 zamknij nawias okrągły zamknij nawias okrągły. Linia 4. print otwórz nawias okrągły odszyfruj podkreślnik slowo otwórz nawias okrągły cudzysłów NIIVHOINL cudzysłów przecinek 5 zamknij nawias okrągły zamknij nawias okrągły. Linia 5. print otwórz nawias okrągły odszyfruj podkreślnik slowo otwórz nawias okrągły cudzysłów NIHIIVLON cudzysłów przecinek 6 zamknij nawias okrągły zamknij nawias okrągły. Linia 6. print otwórz nawias okrągły odszyfruj podkreślnik slowo otwórz nawias okrągły cudzysłów NIHIIVLON cudzysłów przecinek 1 zamknij nawias okrągły zamknij nawias okrągły. Linia 7. print otwórz nawias okrągły odszyfruj podkreślnik slowo otwórz nawias okrągły 124 przecinek 6 zamknij nawias okrągły zamknij nawias okrągły. Linia 8. print otwórz nawias okrągły odszyfruj podkreślnik slowo otwórz nawias okrągły cudzysłów NIHIIVLON cudzysłów przecinek minus 4 zamknij nawias okrągły zamknij nawias okrągły. Linia 10. kratka NIHILNOVI. Linia 11. kratka NIHILNOVI. Linia 12. kratka NIHILNOVI. Linia 13. kratka NIHILNOVI. Linia 14. kratka NIHILNOVI. Linia 15. kratka False. Linia 16. kratka False. Linia 17. kratka False.
Ciekawostka

Błąd ValueError w języku Python występuje, gdy funkcja otrzymuje argument, który jest poza dopuszczalnym zakresem wartości lub jest nieodpowiedniego typu. Oto przykład:

Linia 1. number znak równości int otwórz nawias okrągły cudzysłów abc cudzysłów zamknij nawias okrągły. Linia 2. kratka próba konwersji ciągu znaków na liczbę całkowitą przecinek. Linia 3. kratka ale ciąg nie jest poprawnym numerem.

W przykładzie funkcja int() oczekuje, że argument będzie ciągiem znaków, który reprezentuje liczbę całkowitą. Jednak w tym przypadku, ciąg „abc” nie może zostać przekonwertowany na liczbę całkowitą, co prowadzi do błędu ValueError.

Ten problem możemy rozwiązać, wykorzystując instrukcje try oraz expect:

Linia 1. try dwukropek. Linia 2. number znak równości int otwórz nawias okrągły cudzysłów abc cudzysłów zamknij nawias okrągły. Linia 3. except ValueError dwukropek. Linia 4. print otwórz nawias okrągły cudzysłów Nie można przekonwertować ciągu znaków na liczbę całkowitą cudzysłów zamknij nawias okrągły.

W poniższym przypadku sprawdzamy czy na liście występuje znak "*". Używamy metody lista.index("*"), która zwraca indeks elementu listy, jeśli występuje. W innym przypadku zwraca błąd ValueError

Linia 1. lista podkreślnik 1 znak równości otwórz nawias kwadratowy cudzysłów minus cudzysłów przecinek cudzysłów minus cudzysłów przecinek cudzysłów minus cudzysłów przecinek cudzysłów asterysk cudzysłów przecinek cudzysłów minus cudzysłów przecinek cudzysłów minus cudzysłów zamknij nawias kwadratowy. Linia 2. lista podkreślnik 2 znak równości otwórz nawias kwadratowy cudzysłów minus cudzysłów przecinek cudzysłów minus cudzysłów przecinek cudzysłów minus cudzysłów przecinek cudzysłów A cudzysłów przecinek cudzysłów minus cudzysłów przecinek cudzysłów minus cudzysłów zamknij nawias kwadratowy. Linia 3. lista podkreślnik 1 kropka index otwórz nawias okrągły cudzysłów asterysk cudzysłów zamknij nawias okrągły. Linia 4. kratka 3. Linia 5. lista podkreślnik 2 kropka index otwórz nawias okrągły cudzysłów asterysk cudzysłów zamknij nawias okrągły. Linia 6. kratka Traceback otwórz nawias okrągły most recent call last zamknij nawias okrągły dwukropek. Linia 7. kratka File cudzysłów otwórz nawias ostrokątny pyshell kratka 3 zamknij nawias ostrokątny cudzysłów przecinek line 1 przecinek in otwórz nawias ostrokątny module zamknij nawias ostrokątny. Linia 8. kratka lista podkreślnik 2 kropka index otwórz nawias okrągły cudzysłów asterysk cudzysłów zamknij nawias okrągły. Linia 9. kratka ValueError dwukropek apostrof asterysk apostrof is not in list.

Rozwiązanie problemu:

Linia 1. lista podkreślnik 1 znak równości otwórz nawias kwadratowy cudzysłów minus cudzysłów przecinek cudzysłów minus cudzysłów przecinek cudzysłów minus cudzysłów przecinek cudzysłów asterysk cudzysłów przecinek cudzysłów minus cudzysłów przecinek cudzysłów minus cudzysłów zamknij nawias kwadratowy. Linia 2. lista podkreślnik 2 znak równości otwórz nawias kwadratowy cudzysłów minus cudzysłów przecinek cudzysłów minus cudzysłów przecinek cudzysłów minus cudzysłów przecinek cudzysłów A cudzysłów przecinek cudzysłów minus cudzysłów przecinek cudzysłów minus cudzysłów zamknij nawias kwadratowy. Linia 4. try dwukropek. Linia 5. index podkreślnik 1 znak równości lista podkreślnik 1 kropka index otwórz nawias okrągły cudzysłów asterysk cudzysłów zamknij nawias okrągły. Linia 6. print otwórz nawias okrągły f cudzysłów Indeks gwiazdki w liście 1 dwukropek otwórz nawias klamrowy index podkreślnik 1 zamknij nawias klamrowy cudzysłów zamknij nawias okrągły. Linia 7. except ValueError dwukropek. Linia 8. print otwórz nawias okrągły cudzysłów Gwiazdka nie jest na liście 1 cudzysłów zamknij nawias okrągły. Linia 10. try dwukropek. Linia 11. index podkreślnik 2 znak równości lista podkreślnik 2 kropka index otwórz nawias okrągły cudzysłów asterysk cudzysłów zamknij nawias okrągły. Linia 12. print otwórz nawias okrągły f cudzysłów Indeks gwiazdki w liście 2 dwukropek otwórz nawias klamrowy index podkreślnik 2 zamknij nawias klamrowy cudzysłów zamknij nawias okrągły. Linia 13. except ValueError dwukropek. Linia 14. print otwórz nawias okrągły cudzysłów Gwiazdka nie jest na liście 2 cudzysłów zamknij nawias okrągły.

Ważne!

Szyfr płotkowy jest łatwy do złamania metodą siłową, a więc sprawdzaniem każdej możliwej kombinacji. Wynika to z ograniczonej liczby możliwych do użycia kluczy.

1
Przykład 2

Dla dowolnego tekstu możemy przygotować prosty kod, który próbuje odszyfrować wiadomość metodą siłową, testując różne klucze.

Załóżmy, że zaszyfrowany tekst to FAINTNOOIRPSOUCS.

R7itXRFL24rYR
Ćwiczenie 1
Jaki klucz został użyty do zaszyfrowania powyższego tekstu? Możliwe odpowiedzi: 1. Odszyfrowany tekst dla klucza 1 to: PJRY-EGATOZOMAHTYROIO-KPWNN-A, 2. Odszyfrowany tekst dla klucza 2 to: PTJYRRYO-IEOG-AKTPOWZNONM-AAH, 3. Odszyfrowany tekst dla klucza 3 to: PTKOJZPORMWAYHNT-YNREO-IGOA-A, 4. Odszyfrowany tekst dla klucza 4 to: PEHWTGJAYNRTROONIZYOO--M-AKAP, 5. Odszyfrowany tekst dla klucza 5 to: P-OONIMEJGAON-HARTTK-PYOYZRWA, 6. Odszyfrowany tekst dla klucza 6 to: PYTHON-TO-JEZYK-PROGRAMOWANIA, 7. Odszyfrowany tekst dla klucza 7 to: PYTAOP-WIHO-JEZTONAN-YOGRAMRK, 8. Odszyfrowany tekst dla klucza 8 to: PYAOTIP-WOYMT-JEOAR-NANKOHZGR, 9. Odszyfrowany tekst dla klucza 9 to: PRETOTIP-WOYMOGYJ-AZAR-NANKOH

Zapoznaj się z wywołaniem funkcji dla podanych w Ćwiczeniu 1 wartości klucza:

Linia 1. for klucz in range otwórz nawias okrągły 2 przecinek 11 zamknij nawias okrągły dwukropek. Linia 2. tekst znak równości odszyfruj podkreślnik slowo otwórz nawias okrągły cudzysłów FAINTNOOIRPSOUCS cudzysłów przecinek klucz zamknij nawias okrągły. Linia 3. print otwórz nawias okrągły f cudzysłów Odszyfrowany tekst dla klucza otwórz nawias klamrowy klucz zamknij nawias klamrowy to dwukropek otwórz nawias klamrowy tekst zamknij nawias klamrowy cudzysłów zamknij nawias okrągły. Linia 6. kratka Odszyfrowany tekst dla klucza 2 to dwukropek FIARIPNSTONUOCOS. Linia 7. kratka Odszyfrowany tekst dla klucza 3 to dwukropek FTONAOUOIICRNPSS. Linia 8. kratka Odszyfrowany tekst dla klucza 4 to dwukropek FNIURTANPCSOIOOS. Linia 9. kratka Odszyfrowany tekst dla klucza 5 to dwukropek FIOPCSONATIOSURN. Linia 10. kratka Odszyfrowany tekst dla klucza 6 to dwukropek FINISCORONATOPUS. Linia 11. kratka Odszyfrowany tekst dla klucza 7 to dwukropek FINISUSCORONATOP. Linia 12. kratka Odszyfrowany tekst dla klucza 8 to dwukropek FINORSUSCOPIONAT. Linia 13. kratka Odszyfrowany tekst dla klucza 9 to dwukropek FANNORSUSCOPIOTI. Linia 14. kratka Odszyfrowany tekst dla klucza 10 to dwukropek FAINNORSUSCOPIOT.
1
Przykład 3

Możemy przygotować program z graficznym interfejsem do szyfrowania lub odszyfrowywania. Użyjemy do tego celu biblioteki PySimpleGuiPySimpleGuiPySimpleGui.

Ważne!

Pamiętajmy, aby funkcje szyfruj_slowo i odszyfruj_slowo były zapisane w pliku o nazwie funkcje_szyfrujace.py i aby ten plik był w tym samym katalogu co tworzony plik z kodem interfejsu. 

Linia 1. import PySimpleGUI as sg. Linia 2. import sys. Linia 4. try dwukropek. Linia 5. from funkcje podkreślnik szyfrujace import asterysk. Linia 6. except ModuleNotFoundError dwukropek. Linia 7. print otwórz nawias okrągły cudzysłów Brak pliku dwukropek apostrof funkcje podkreślnik szyfrujace kropka py apostrof minus popraw to kropka cudzysłów zamknij nawias okrągły. Linia 8. kratka koniec programu z Error Code 2 otwórz nawias okrągły FileNotFound zamknij nawias okrągły. Linia 9. sys kropka exit otwórz nawias okrągły 2 zamknij nawias okrągły. Linia 11. kratka jeśli funkcje zostały zaimportowane przecinek działamy dalej kropka kropka kropka. Linia 13. uklad znak równości otwórz nawias kwadratowy otwórz nawias kwadratowy sg kropka Text otwórz nawias okrągły cudzysłów Podaj tekst jawny lub szyfrogram otwórz nawias okrągły max kropka 35 znaków zamknij nawias okrągły cudzysłów zamknij nawias okrągły zamknij nawias kwadratowy przecinek. Linia 14. otwórz nawias kwadratowy sg kropka Input otwórz nawias okrągły key znak równości cudzysłów dane cudzysłów zamknij nawias okrągły zamknij nawias kwadratowy przecinek. Linia 15. otwórz nawias kwadratowy sg kropka Radio otwórz nawias okrągły cudzysłów Szyfruj cudzysłów przecinek 1 przecinek key znak równości cudzysłów s cudzysłów przecinek default znak równości True zamknij nawias okrągły przecinek. Linia 16. sg kropka Radio otwórz nawias okrągły cudzysłów Odszyfruj cudzysłów przecinek 1 przecinek key znak równości cudzysłów o cudzysłów zamknij nawias okrągły przecinek. Linia 17. sg kropka Text otwórz nawias okrągły cudzysłów Wartość klucza cudzysłów zamknij nawias okrągły przecinek sg kropka Input otwórz nawias okrągły size znak równości otwórz nawias okrągły 3 przecinek 1 zamknij nawias okrągły przecinek key znak równości cudzysłów k cudzysłów zamknij nawias okrągły zamknij nawias kwadratowy przecinek. Linia 18. otwórz nawias kwadratowy sg kropka Text otwórz nawias okrągły cudzysłów Tekst wynikowy dwukropek cudzysłów zamknij nawias okrągły zamknij nawias kwadratowy przecinek. Linia 19. otwórz nawias kwadratowy sg kropka Text otwórz nawias okrągły cudzysłów cudzysłów asterysk 40 przecinek size znak równości otwórz nawias okrągły 40 przecinek 1 zamknij nawias okrągły przecinek auto podkreślnik size podkreślnik text znak równości True przecinek key znak równości cudzysłów minus OUT minus cudzysłów zamknij nawias okrągły zamknij nawias kwadratowy przecinek. Linia 20. otwórz nawias kwadratowy sg kropka Button otwórz nawias okrągły apostrof Wykonaj apostrof zamknij nawias okrągły przecinek sg kropka Exit otwórz nawias okrągły zamknij nawias okrągły zamknij nawias kwadratowy zamknij nawias kwadratowy. Linia 21. okno znak równości sg kropka Window otwórz nawias okrągły apostrof Szyfr płotkowy apostrof przecinek uklad zamknij nawias okrągły. Linia 23. while True dwukropek. Linia 24. event przecinek values znak równości okno kropka read otwórz nawias okrągły zamknij nawias okrągły. Linia 25. kratka wykonujemy próbę zmiany wartości na liczbę. Linia 26. try dwukropek. Linia 27. klucz znak równości int otwórz nawias okrągły values otwórz nawias kwadratowy cudzysłów k cudzysłów zamknij nawias kwadratowy zamknij nawias okrągły. Linia 28. kratka w przypadku niepowodzenia przyjmujemy 3 jako wartość klucza. Linia 29. except dwukropek. Linia 30. klucz znak równości 3. Linia 32. if event znak równości znak równości apostrof Exit apostrof or event is None dwukropek. Linia 33. break. Linia 34. if event znak równości znak równości apostrof Wykonaj apostrof dwukropek. Linia 35. if values otwórz nawias kwadratowy apostrof s apostrof zamknij nawias kwadratowy dwukropek. Linia 36. wynik znak równości szyfruj podkreślnik slowo otwórz nawias okrągły values otwórz nawias kwadratowy cudzysłów dane cudzysłów zamknij nawias kwadratowy przecinek klucz zamknij nawias okrągły. Linia 37. if values otwórz nawias kwadratowy apostrof o apostrof zamknij nawias kwadratowy dwukropek. Linia 38. wynik znak równości odszyfruj podkreślnik slowo otwórz nawias okrągły values otwórz nawias kwadratowy cudzysłów dane cudzysłów zamknij nawias kwadratowy przecinek klucz zamknij nawias okrągły. Linia 39. okno otwórz nawias kwadratowy cudzysłów minus OUT minus cudzysłów zamknij nawias kwadratowy kropka update otwórz nawias okrągły wynik zamknij nawias okrągły. Linia 40. okno kropka close otwórz nawias okrągły zamknij nawias okrągły.

Efektem działania takiego programu jest okno z możliwością wyboru operacji.

Już wiesz

Podsumujmy najważniejsze informacje:

  • Szyfr płotkowy jest przykładem szyfru przestawieniowego.

  • Szyfr płotkowy jest łatwy w implementacji.

  • Atak siłowy jest efektywnym sposobem na złamanie takiego szyfru.

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 wykorzystywana do szyfrowania i/lub deszyfrowania wiadomości

klucz publiczny
klucz publiczny

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

klucz prywatny
klucz prywatny

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

kryptografia
kryptografia

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

PySimpleGUI
PySimpleGUI

biblioteka do wyświetlania prostych okien dialogowych, niezależna od systemu operacyjnego; nie jest dostępna w standardowej instalacji języka Python – należy ją zainstalować, korzystając z mechanizmu pip; (więcej informacji dostępnych jest w dokumentacji na stronie PySimpleGUI)

szyfrogram
szyfrogram

zaszyfrowana wiadomość

szyfrowanie
szyfrowanie

przekształcanie tekstu jawnego w szyfrogram

tablica ASCII
tablica ASCII

spis kodów znaków wykorzystywany w komputerach