Szyfruje tekst przez przesunięcie każdej litery o stałą wartość w alfabecie.
Szyfr Cezara to jeden z najprostszych szyfrów – został rzekomo użyty przez Juliusza Cezara do zabezpieczania korespondencji wojskowej. Polega na przesunięciu każdej litery o stałą wartość, zwaną kluczem.
Cechy szyfru:
Symetryczny – do szyfrowania i deszyfrowania używamy tego samego klucza (deszyfrowanie to szyfrowanie z ujemnym kluczem).
Podstawieniowy – litery zostają zamienione na inne, nie przestawiane.
Przykłady kluczowych przypadków:
Zawijanie alfabetu – gdy przesunięcie wychodzi poza z, wracamy na początek alfabetu. Stąd operacja modulo 26.
Klucz większy od 26 – bierzemy klucz mod 26, bo przesunięcie o 27 to to samo, co o 1.
Algorytm: dla każdej litery wyliczamy jej pozycję w alfabecie (ord(litera) - ord('a')), dodajemy klucz, bierzemy modulo 26 i zamieniamy z powrotem na znak.
Bezpieczeństwo: szyfr Cezara jest trywialny do złamania – wystarczy 25 prób (lub analiza częstotliwości liter). Współcześnie stosowany tylko w celach edukacyjnych.
funkcja szyfruj_cezara(tekst, klucz): wynik ← "" // normalizujemy klucz - przesunięcie o 27 to to samo co o 1 klucz ← klucz mod 26 dla każdej litery z w tekst: jeżeli z jest małą literą alfabetu: // przesuwamy literę z zawijaniem alfabetu przesunieta ← (ascii(z) - ascii('a') + klucz) mod 26 wynik ← wynik + znak(przesunieta + ascii('a')) w przeciwnym razie: // znaki spoza alfabetu pozostawiamy bez zmian wynik ← wynik + z zwróć wynik
def szyfruj_cezara(tekst, klucz):
wynik = ""
klucz = klucz % 26
for z in tekst:
if 'a' <= z <= 'z':
przesunieta = (ord(z) - ord('a') + klucz) % 26
wynik += chr(przesunieta + ord('a'))
else:
wynik += z
return wynik
# Przykład użycia - szyfrowanie i deszyfrowanie
zaszyfrowane = szyfruj_cezara("matura", 3)
print(zaszyfrowane)
# Wynik: pdwxud
# Deszyfrowanie - wystarczy ujemny klucz
print(szyfruj_cezara(zaszyfrowane, -3))
# Wynik: matura
O(n)O(n)Zagadnienia z tego samego obszaru matury – warto je powtórzyć razem: