Skip to content

Latest commit

 

History

History
97 lines (64 loc) · 3 KB

File metadata and controls

97 lines (64 loc) · 3 KB

Programming-course-cpp

Jakub Piskorowski on 23/02/2022 wersja: 1.1

Temat: Szyfr Cezara

Przedstawienie działania szyfru Cezara.

Kod źródłowy: szyfr-cezara.cpp

📗 Poziom 2

Powrót do Podstawowe algorytmy


Objaśnienie

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:

Powrót do początku

Litery w kodzie ASCII Ź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).


Funkcja szyfrująca i deszyfrująca

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