Jakub Piskorowski on 23/02/2022 wersja: 1.1
Przedstawienie działania szyfru Cezara.
Kod źródłowy: szyfr-cezara.cpp
📗 Poziom 2
Powrót do Podstawowe algorytmy
Zacznijmy od wyjaśnienia idei szyfru Cezara. Jest to jeden z najprostszych szyfrów przesuwających. Polega ona na przesunięciu każdej litery o pewną stałą wartość zwaną kluczem. Prześledźmy przykład:
Zaszyfrujmy słowo Marcin kluczem o wartości równej -2
. A więc każdą literę przesuwamy w lewą stronę o dwie wartości:
Przed szyfrowaniem Po szyfrowaniu
M K
a y
r p
c a
i g
n l
Oczywiście szyfrowanie odbywa się w zakresie liter alfabetu łacińskiego. Aby zaszyfrować literę a
należy się cofnąć do końca alfabetu i będzie to litera y
:
Źródło: sticksandstones.kstrom.com
Słowo "Marcin" po zaszyfrowaniu wygląda następująco: "Kypagl".
Aby zdeszyfrować dane słowo należy przesunąć każdy znak o
−klucz,
czyli w tym przypadku o
−(−2)=2
Szyfr Cezara jest szyfrem symetrycznym, ponieważ do szyfrowania i deszyfrowania wykorzystujemy ten sam klucz, dodatkowo jest to szyfr podstawieniowy (litery nie zmieniają swojego położenia, tylko zostają podmienione na inne).
Wejście:
klucz
- liczba określająca o ile przesunąć każdy znak (klucz
szyfrowanie, -klucz
deszyfrowanie),
tab
– tablica znaków, przechowująca maksymalnie 1000 znaków.
Wyjscie:
tab
- tablica z podmienionymi znakami.
Zmienne pomocnicze:
dl
– przechowujący rozmiar tablicy znaków.
Lista kroków:
k1: dl ← rozmiar(tab)
,
k2: Jeśli (nie) klucz >= -26 oraz klucz <= 26
,
to wyjdź
,
k3: Jeśli klucz >= 0
,
wykonuj kroki od k4 do k5
,
k4: Dopóki i < dl
,
wykonuj krok k5
k5: Jeśli tab + klucz <= z
,
to tab += klucz
,
inaczej tab ← tab + klucz - 26
,
k6: inaczej
,
k7: Dopóki i < dl
,
wykonuj krok k8
k8: Jeśli tab + klucz >= a
,
to tab += klucz
,
inaczej tab ← tab + klucz + 26
,
Wynik:
Podaj wyraz skladajacy sie z malych liter: marcin
Podaj klucz z przedzialu [-26..26]: -2
Po zaszyfrowaniu: kypagl
Po rozszyfrowaniu: marcin
Kod źrodłowy: szyfr-cezara.cpp