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:
Podczas odszyfrowywania wykonujemy operację odwrotną – przesuwamy litery w lewo o podaną liczbę pozycji.
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.
Zaszyfruj tekst:
HASLO DO SYSTEMU TO ORION
Tym razem ustaw przesunięcie na 5. Uruchom program i sprawdź, czy uda się odzyskać oryginalną wiadomość.
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ęć.
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.
Ten program odszyfrowuje wiadomość zakodowaną szyfrem Cezara. Użytkownik podaje zaszyfrowany tekst oraz wartość przesunięcia.
Program analizuje każdy znak wiadomości osobno:
tekst = input("Podaj szyfrogram: ") – zatrzymuje program i czeka na wpisanie zaszyfrowanej wiadomości.klucz = int(input("Podaj przesunięcie: ")) – pobiera wartość przesunięcia i zamienia ją na liczbę.for znak in tekst: – przechodzi kolejno przez każdy znak zaszyfrowanej wiadomości.if znak.isalpha(): – sprawdza, czy aktualny znak jest literą. Spacje, cyfry i inne znaki nie będą przesuwane.start = ord('A') if znak.isupper() else ord('a') – sprawdza, czy przetwarzana litera jest wielka czy mała i ustala początek odpowiedniego alfabetu.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.wynik += chr(nowy) – zamienia obliczony numer z powrotem na literę i dopisuje ją do odszyfrowanej wiadomości.print("Odszyfrowana wiadomość:", wynik) – wyświetla gotową, odszyfrowaną wiadomość.
tekst = input("Podaj szyfrogram: ")klucz = int(input("Podaj przesunięcie: "))wynik = ""for znak in tekst:if znak.isalpha():start = ord('A') if znak.isupper() else ord('a')nowy = (ord(znak) - start - klucz) % 26 + startwynik += chr(nowy)else:wynik += znakprint("Odszyfrowana wiadomość:", wynik)
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:
tekst = input("Podaj szyfrogram: ") – zatrzymuje program i czeka na wpisanie zaszyfrowanej wiadomości.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.wynik = "" – przed sprawdzeniem każdego klucza tworzy pusty tekst, do którego będzie zapisywana kolejna wersja odszyfrowanej wiadomości.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ść.if znak.isalpha(): – sprawdza, czy aktualny znak jest literą. Spacje, cyfry i inne znaki pozostają bez zmian.start = ord('A') if znak.isupper() else ord('a') – sprawdza, czy przetwarzana litera jest wielka czy mała i ustala początek odpowiedniego alfabetu.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.wynik += chr(nowy) – zamienia obliczony numer z powrotem na literę i dopisuje ją do aktualnie tworzonej wersji wiadomości.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ęć.
print("--- ŁAMACZ SZYFRU CEZARA ---")tekst = input("Podaj szyfrogram: ")for klucz in range(26):wynik = ""for znak in tekst:if znak.isalpha():start = ord('A') if znak.isupper() else ord('a')nowy = (ord(znak) - start - klucz) % 26 + startwynik += chr(nowy)else:wynik += znakprint("Klucz", klucz, ":", wynik)