Szyfr Kołowy

Szyfr kołowy polega na zastępowaniu każdej litery jej współrzędnymi odczytanymi z dwóch pierścieni koła. Pierwszy pierścień oznaczony jest jako I, drugi jako II, a każda litera ma dodatkowo numer swojej kolumny. Na przykład litera A jest zapisywana jako I1, a litera X jako II11. Szyfrowanie polega więc na odczytaniu oznaczenia wybranej litery, a deszyfrowanie na odnalezieniu litery na podstawie zapisu, np. II11. Układ można łatwo zmienić, obracając jeden z pierścieni koła.

Program w Pythonie

W linijkach 1-30 znajduje się funkcja szyfr_kolowy. To najważniejsza część programu. Funkcja otrzymuje tekst oraz tryb działania: szyfruj lub deszyfruj.

W linijkach 2-3 zapisane są dwa pierścienie szyfru. Pierwszy zawiera litery od A do M, a drugi od N do Z. Położenie litery w napisie oznacza jej numer kolumny. Na przykład litera K jest na pozycji 11 w pierwszym pierścieniu, więc otrzymuje zapis I11. W linijce 4 powstaje pusta zmienna wynik, do której program będzie dopisywał kolejne fragmenty wiadomości.

W linijkach 6-17 wykonywane jest szyfrowanie. Pętla z linijki 7 sprawdza kolejno każdy znak tekstu. Jeśli litera znajduje się w pierwszym pierścieniu, program w linijce 9 odczytuje jej pozycję i dodaje 1, ponieważ liczenie pozycji w Pythonie zaczyna się od zera. Następnie w linijce 10 zapisuje do wyniku literę I, numer kolumny oraz spację. W ten sposób K zostaje zapisane jako I11.

Jeżeli litera należy do drugiego pierścienia, linijki 11-13 wykonują podobne działanie, ale przed numerem pojawia się II. Dlatego litera O zostaje zapisana jako II2. W linijkach 14-15 program zamienia zwykłą spację między wyrazami na znak /, aby później podczas deszyfrowania wiedzieć, gdzie ma ponownie wstawić odstęp. Linijka 17 zwraca cały szyfrogram, a metoda strip() usuwa niepotrzebną spację znajdującą się na jego końcu.

Od linijki 19 zaczyna się deszyfrowanie. Metoda split() dzieli zaszyfrowaną wiadomość na osobne fragmenty, na przykład I11, II2 i II7. Pętla z linijki 20 sprawdza każdy taki kod. Jeśli program trafi na /, wstawia do wyniku zwykłą spację.

Ważna jest kolejność w linijkach 23 i 26. Program najpierw sprawdza, czy kod zaczyna się od II, ponieważ zapis II2 zaczyna się także od litery I. Z kodu II2 program pobiera cyfrę 2 za pomocą kod[2:], a następnie odczytuje drugą literę drugiego pierścienia, czyli O. Dla kodu I11 używany jest zapis kod[1:], ponieważ po jednym znaku I od razu występuje numer. Wtedy program odczytuje jedenastą literę pierwszego pierścienia, czyli K.

W linijkach 32-35 program sprawdza swoje działanie. Najpierw szyfruje słowo KOT, otrzymując I11 II2 II7, a później wykorzystuje ten wynik do deszyfrowania i ponownie otrzymuje słowo KOT.

  1. def szyfr_kolowy(tekst, tryb):
  2. pierwszy_pierscien = "ABCDEFGHIJKLM"
  3. drugi_pierscien = "NOPQRSTUVWXYZ"
  4. wynik = ""
  5. if tryb == "szyfruj":
  6. for znak in tekst.upper():
  7. if znak in pierwszy_pierscien:
  8. numer = pierwszy_pierscien.index(znak) + 1
  9. wynik = wynik + "I" + str(numer) + " "
  10. elif znak in drugi_pierscien:
  11. numer = drugi_pierscien.index(znak) + 1
  12. wynik = wynik + "II" + str(numer) + " "
  13. elif znak == " ":
  14. wynik = wynik + "/ "
  15. return wynik.strip()
  16. kody = tekst.split()
  17. for kod in kody:
  18. if kod == "/":
  19. wynik = wynik + " "
  20. elif kod.startswith("II"):
  21. numer = int(kod[2:])
  22. wynik = wynik + drugi_pierscien[numer - 1]
  23. elif kod.startswith("I"):
  24. numer = int(kod[1:])
  25. wynik = wynik + pierwszy_pierscien[numer - 1]
  26. return wynik
  27. tajemna_wiadomosc = "KOT"
  28. zaszyfrowana = szyfr_kolowy(tajemna_wiadomosc, "szyfruj")
  29. print("Zaszyfrowana wiadomość:", zaszyfrowana)
  30. odszyfrowana = szyfr_kolowy(zaszyfrowana, "deszyfruj")
  31. print("Odszyfrowana wiadomość:", odszyfrowana)

Szyfr kołowy – narzędzie

SzyfrujTryb
0 / 0Obrót pierścieni
0Znaków w tekście

Wiadomość

0 znaków

Wynik

0 znaków
Pierścień I
Pierścień II

Przewijanie do góry