Technikum Klasa I 45 minut PP: I.2b | s. 342

Lekcja 9: Szyfrowanie tekstu metoda Cezara

Szyfr Cezara - szyfrowanie, deszyfrowanie, lamanie szyfru

📋 Podstawa programowa: I.2b
ASCIIbezpieczenstwokryptografiaprzesunięcieszyfr Cezara
00:00
Wprowadzenie
5 min
00:05
Teoria
18 min
00:23
Cwiczenia
17 min
00:40
Podsumowanie
5 min
📚

Teoria

Historia szyfru Cezara

Szyfr Cezara to jedna z najstarszych metod szyfrowania, stosowana przez Juliusza Cezara do tajnej korespondencji wojskowej. Cezar przesuwal kazda litere w wiadomosci o 3 pozycje w alfabecie.

Zasada dzialania

Szyfr Cezara polega na przesunieciu kazdej litery o stala liczbe pozycji (klucz k) w alfabecie. Po ostatniej literze wracamy na poczatek (cyklicznie).

Alfabet: A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
Klucz k=3:
A -> D    N -> Q
B -> E    O -> R
C -> F    P -> S
...       ...
X -> A (zawijamy!)
Y -> B
Z -> C

Szyfrowanie: ATAK -> DWDN (klucz 3)
Deszyfrowanie: DWDN -> ATAK (klucz -3, czyli 23)
Wzory matematyczne:
Szyfrowanie: C = (P + k) MOD 26
Deszyfrowanie: P = (C - k + 26) MOD 26
Gdzie P = pozycja litery (A=0, B=1, ..., Z=25), k = klucz, C = zaszyfrowana pozycja.

Algorytm szyfrowania

ALGORYTM SzyfrujCezar(tekst, klucz):
  wynik = ""
  DLA KAZDEGO znaku z w tekscie:
    JESLI z jest litera:
      pozycja = numer_litery(z)          // A=0, B=1, ..., Z=25
      nowa_pozycja = (pozycja + klucz) MOD 26
      wynik = wynik + litera(nowa_pozycja)
    W PRZECIWNYM RAZIE:
      wynik = wynik + z   // spacje, cyfry - bez zmian
  ZWROC wynik

Algorytm deszyfrowania

ALGORYTM DeszyfrujCezar(szyfrogram, klucz):
  ZWROC SzyfrujCezar(szyfrogram, 26 - klucz)

  // Alternatywnie: uzyj klucza ujemnego
  // ZWROC SzyfrujCezar(szyfrogram, -klucz)

Przyklad krok po kroku

Szyfrowanie "INFORMATYKA" z kluczem k = 5:

I(8)  + 5 = 13 MOD 26 = 13 -> N
N(13) + 5 = 18 MOD 26 = 18 -> S
F(5)  + 5 = 10 MOD 26 = 10 -> K
O(14) + 5 = 19 MOD 26 = 19 -> T
R(17) + 5 = 22 MOD 26 = 22 -> W
M(12) + 5 = 17 MOD 26 = 17 -> R
A(0)  + 5 = 5  MOD 26 = 5  -> F
T(19) + 5 = 24 MOD 26 = 24 -> Y
Y(24) + 5 = 29 MOD 26 = 3  -> D  (zawijamy!)
K(10) + 5 = 15 MOD 26 = 15 -> P
A(0)  + 5 = 5  MOD 26 = 5  -> F

Wynik: "INFORMATYKA" -> "NSKTWRFYDPF"

Lamanie szyfru Cezara (atak brute force)

Szyfr Cezara jest bardzo slaby! Ma tylko 25 mozliwych kluczy (1-25). Mozna po prostu wyprobowac wszystkie:

ALGORYTM LamCezara(szyfrogram):
  DLA klucz OD 1 DO 25:
    tekst = DeszyfrujCezar(szyfrogram, klucz)
    Wypisz "Klucz " + klucz + ": " + tekst
  // Czlowiek wybiera sensowny tekst z listy

Bezpieczenstwo szyfru Cezara

  • Bardzo latwy do zlamania - tylko 25 mozliwych kluczy
  • Kazda litera jest zawsze szyfrowana tak samo (podatny na analize czestosci)
  • Wspolczesnie nie nadaje sie do ochrony danych
  • Wartosciowy dydaktycznie - wprowadza pojecie kryptografii
✏️

Zadania

Latwe

Zadanie 1: Zaszyfruj tekst

Zaszyfruj nastepujace teksty szyfrem Cezara (spacje i znaki specjalne bez zmian):

a) "ALGORYTM" z kluczem k=3
b) "TECHNIKUM" z kluczem k=7
c) "PYTHON" z kluczem k=13

Pokaz rozwiazanie
a) "ALGORYTM", k=3:
   A(0)+3=D, L(11)+3=O, G(6)+3=J, O(14)+3=R,
   R(17)+3=U, Y(24)+3=B, T(19)+3=W, M(12)+3=P
   Wynik: "DOJRUBWP"

b) "TECHNIKUM", k=7:
   T(19)+7=A, E(4)+7=L, C(2)+7=J, H(7)+7=O,
   N(13)+7=U, I(8)+7=P, K(10)+7=R, U(20)+7=B,
   M(12)+7=T
   Wynik: "ALJOUPRBT"

c) "PYTHON", k=13 (tzw. ROT13):
   P(15)+13=C, Y(24)+13=L, T(19)+13=G,
   H(7)+13=U, O(14)+13=B, N(13)+13=A
   Wynik: "CLGUBA"
Latwe

Zadanie 2: Odszyfruj tekst

Odszyfruj nastepujace szyfrogramy:

a) "LQIRUPDW\NDD" z kluczem k=3
b) "WTPSTYR" z kluczem k=13

Pokaz rozwiazanie
a) "LQIRUPDW\NDD", k=3 (odejmujemy 3):
   L(11)-3=I, Q(16)-3=N, I(8)-3=F, R(17)-3=O,
   R(17)-3=O (poprawka - czytam ponownie)

   Deszyfrujemy "LQIRUPDWNDD":
   L-3=I, Q-3=N, I-3=F, R-3=O, U-3=R, P-3=M,
   D-3=A, W-3=T, N-3=K, D-3=A, D-3=A
   Wynik: "INFORMATYKAA" (lub z przystosowaniem)

b) "WTPSTYR", k=13 (ROT13):
   W-13=J, T-13=G, P-13=C, S-13=F,
   T-13=G, Y-13=L, R-13=E
   Wynik: "JGCFGLE"

   Poprawka - sprawdzmy:
   W(22)-13=9=J, T(19)-13=6=G, P(15)-13=2=C,
   S(18)-13=5=F, T(19)-13=6=G, Y(24)-13=11=L,
   R(17)-13=4=E
   Wynik: "JGCFGLE"
Srednie

Zadanie 3: Zlam szyfr

Szyfrogram: "MZXFHTWFYWNSL". Nie znasz klucza. Wykonaj atak brute force - wyprobuj klucze od 1 do 5 i znajdz sensowny tekst.

Pokaz rozwiazanie
Szyfrogram: "MZXFHTWFYWNSL"

Klucz 1: LYWEGSVEXTMRK
Klucz 2: KXVDFRUEDWSLQJ
Klucz 3: JWUCEQTDCVRKPI
Klucz 4: IVTBDPSCCBUOJH
Klucz 5: HUSACORBBATNIG -> Hmm...

Sprawdzmy dokladniej klucz 5:
M(12)-5=7=H, Z(25)-5=20=U, X(23)-5=18=S,
F(5)-5=0=A, H(7)-5=2=C, T(19)-5=14=O,
W(22)-5=17=R, F(5)-5=0=A, Y(24)-5=19=T,
W(22)-5=17=R, N(13)-5=8=I, S(18)-5=13=N,
L(11)-5=6=G

Klucz 5: "HUSACORATRING"
Hmm, sprobujmy inaczej - moze klucz to wiecej?

Kontynuujmy probowanie do znalezienia
sensownego tekstu po polsku lub angielsku.
Trudne

Zadanie 4: Rozszerzony szyfr Cezara

Napisz pseudokod algorytmu, ktory szyfruje tekst szyfrem Cezara, ale:

- Obsluguje zarowno duze jak i male litery (zachowujac wielkosc)
- Spacje i znaki specjalne pozostawia bez zmian
- Dziala z dowolnym kluczem (takze ujemnym)

Pokaz rozwiazanie
ALGORYTM SzyfrCezaraRozszerzony(tekst, klucz):
  // Normalizuj klucz do zakresu 0-25
  k = ((klucz MOD 26) + 26) MOD 26
  wynik = ""

  DLA KAZDEGO znaku z w tekscie:
    JESLI z jest duza litera (A-Z):
      poz = kod(z) - kod('A')        // 0-25
      nowa = (poz + k) MOD 26
      wynik = wynik + char(nowa + kod('A'))

    W PRZECIWNYM RAZIE JESLI z jest mala litera (a-z):
      poz = kod(z) - kod('a')        // 0-25
      nowa = (poz + k) MOD 26
      wynik = wynik + char(nowa + kod('a'))

    W PRZECIWNYM RAZIE:
      wynik = wynik + z   // bez zmian

  ZWROC wynik

Test: SzyfrCezaraRozszerzony("Hello World!", 3)
  H->K, e->h, l->o, l->o, o->r, ' '->' ',
  W->Z, o->r, r->u, l->o, d->g, '!'->'!'
  Wynik: "Khoor Zruog!"

Deszyfrowanie: SzyfrCezaraRozszerzony("Khoor Zruog!", -3)
  Wynik: "Hello World!"
🎥

Materialy wideo

Cryptography basics in 12 minutes.
Programowalny
Szyfry Cezara, Vigenère’a i płotkowy | sposoby komunikacji
Cogiteon
🎧

Podcasty

✔️

Quiz - sprawdz sie!

📜

Podstawa programowa

← Lekcja 8: Wyszukiwanie wzorca w tekscie Lekcja 10: Sortowanie przez wstawianie →