Szyfrowanie

Szyfr Cezara

Opis zadania

Szyfr Cezara to jeden z najprostszych sposobów szyfrowania tekstu. Każda litera zostaje przesunięta w alfabecie o określoną liczbę pozycji.

Na przykład przy przesunięciu o 3:

  • A zmienia się w D,
  • B zmienia się w E,
  • C zmienia się w F.

Podczas odszyfrowywania wykonujemy operację odwrotną – przesuwamy litery w lewo o podaną liczbę pozycji.


Zadania

Zadanie 1 – pierwsza wiadomość

Wejdź na stronę z szyfrem i zaszyfruj wiadomość:

SPOTKANIE O GODZINIE 15

Ustaw przesunięcie na 3. Następnie skopiuj otrzymany szyfrogram i spróbuj odszyfrować go za pomocą programu w Pythonie.

Zadanie 2 – tajna wiadomość

Zaszyfruj tekst:

HASLO DO SYSTEMU TO ORION

Tym razem ustaw przesunięcie na 5. Uruchom program i sprawdź, czy uda się odzyskać oryginalną wiadomość.

Zadanie 3 – nieznany klucz

Zaszyfruj dowolną krótką wiadomość, ale nie zapisuj informacji o użytym przesunięciu.

Przekaż szyfrogram drugiej osobie. Jej zadaniem jest użycie programu zaawansowanego i znalezienie poprawnej wiadomości spośród wszystkich możliwych przesunięć.

Zadanie 4 – własny komunikat

Wymyśl wiadomość składającą się z co najmniej 20 znaków. Zaszyfruj ją dowolnym przesunięciem od 1 do 25.

Następnie odszyfruj wiadomość przy pomocy programu w Pythonie i sprawdź, czy wynik jest identyczny z tekstem początkowym.




Program prosty

Opis działania programu

Ten program odszyfrowuje wiadomość zakodowaną szyfrem Cezara. Użytkownik podaje zaszyfrowany tekst oraz wartość przesunięcia.

Program analizuje każdy znak wiadomości osobno:

  1. tekst = input("Podaj szyfrogram: ") – zatrzymuje program i czeka na wpisanie zaszyfrowanej wiadomości.
  2. klucz = int(input("Podaj przesunięcie: ")) – pobiera wartość przesunięcia i zamienia ją na liczbę.
  3. for znak in tekst: – przechodzi kolejno przez każdy znak zaszyfrowanej wiadomości.
  4. if znak.isalpha(): – sprawdza, czy aktualny znak jest literą. Spacje, cyfry i inne znaki nie będą przesuwane.
  5. start = ord('A') if znak.isupper() else ord('a') – sprawdza, czy przetwarzana litera jest wielka czy mała i ustala początek odpowiedniego alfabetu.
  6. nowy = (ord(znak) - start - klucz) % 26 + start – oblicza pozycję odszyfrowanej litery. Operator % 26 sprawia, że po przekroczeniu początku alfabetu program przechodzi na jego koniec.
  7. wynik += chr(nowy) – zamienia obliczony numer z powrotem na literę i dopisuje ją do odszyfrowanej wiadomości.
  8. print("Odszyfrowana wiadomość:", wynik) – wyświetla gotową, odszyfrowaną wiadomość.

  1. tekst = input("Podaj szyfrogram: ")
  2. klucz = int(input("Podaj przesunięcie: "))
  3. wynik = ""
  4. for znak in tekst:
  5. if znak.isalpha():
  6. start = ord('A') if znak.isupper() else ord('a')
  7. nowy = (ord(znak) - start - klucz) % 26 + start
  8. wynik += chr(nowy)
  9. else:
  10. wynik += znak
  11. print("Odszyfrowana wiadomość:", wynik)



Program zaawansowany

Opis działania programu

Ten program próbuje odszyfrować wiadomość zapisaną szyfrem Cezara bez znajomości klucza. Zamiast prosić użytkownika o podanie przesunięcia, sprawdza kolejno wszystkie 26 możliwości.

Program wykonuje następujące kroki:

  1. tekst = input("Podaj szyfrogram: ") – zatrzymuje program i czeka na wpisanie zaszyfrowanej wiadomości.
  2. for klucz in range(26): – rozpoczyna sprawdzanie wszystkich możliwych kluczy od 0 do 25. Program wykona dalszą część kodu 26 razy, za każdym razem używając innego przesunięcia.
  3. wynik = "" – przed sprawdzeniem każdego klucza tworzy pusty tekst, do którego będzie zapisywana kolejna wersja odszyfrowanej wiadomości.
  4. for znak in tekst: – druga pętla przechodzi kolejno przez wszystkie znaki zaszyfrowanej wiadomości. Oznacza to, że dla każdego z 26 kluczy analizowana jest cała wiadomość.
  5. if znak.isalpha(): – sprawdza, czy aktualny znak jest literą. Spacje, cyfry i inne znaki pozostają bez zmian.
  6. start = ord('A') if znak.isupper() else ord('a') – sprawdza, czy przetwarzana litera jest wielka czy mała i ustala początek odpowiedniego alfabetu.
  7. nowy = (ord(znak) - start - klucz) % 26 + start – przesuwa literę zgodnie z aktualnie sprawdzanym kluczem. Operator % 26 pilnuje, aby przesunięcie zawsze pozostało w zakresie 26 liter alfabetu.
  8. wynik += chr(nowy) – zamienia obliczony numer z powrotem na literę i dopisuje ją do aktualnie tworzonej wersji wiadomości.
  9. print("Klucz", klucz, ":", wynik) – po sprawdzeniu całej wiadomości wyświetla użyty klucz oraz otrzymany tekst. Spośród 26 wyników należy odnaleźć wiadomość, która ma sens.

W ten sposób program nie musi znać klucza. Sprawdza wszystkie możliwe przesunięcia metodą brute force, czyli metodą siłową. W przypadku szyfru Cezara jest to bardzo skuteczne, ponieważ istnieje tylko 26 możliwych przesunięć.


  1. print("--- ŁAMACZ SZYFRU CEZARA ---")
  2. tekst = input("Podaj szyfrogram: ")
  3. for klucz in range(26):
  4. wynik = ""
  5. for znak in tekst:
  6. if znak.isalpha():
  7. start = ord('A') if znak.isupper() else ord('a')
  8. nowy = (ord(znak) - start - klucz) % 26 + start
  9. wynik += chr(nowy)
  10. else:
  11. wynik += znak
  12. print("Klucz", klucz, ":", wynik)



Interpreter online Python