Szyfr Cezara jest szyfrem podstawieniowym, co oznacza, że każda litera tekstu jawnego (tekstu szyfrowanego) jest zastępowana inną. W przypadku omawianego szyfru każda litera przesuwana jest w alfabecie o ustaloną stałą wartość klucza, stąd szyfr ten jest szyfrem przesuwnym. Szyfrogram (zaszyfrowana wiadomość) można odszyfrować tym samym kluczem, tylko z przeciwną wartością i dlatego szyfr Cezara jest szyfrem symetrycznym (ten sam klucz służy do szyfrowania i deszyfrowania).
Weźmy ciąg kilku małych liter:$$abcxyz$$ oraz klucz = 2. Każdą z liter zastępujemy literą znajdującą się o dwie pozycje dalej w alfabecie: $$a → c$$$$b → d$$$$c → e$$$$x → a$$$$y → a$$$$z → b$$W sytuacji, gdy wyjdziemy poza alfabet, to wznawiamy odliczanie liter idąc na jego początek.
Załóżmy, że szyfrować będziemy ciąg małych liter języka łacińskiego oraz klucz zawiera się w przedziale [-25..25].
Każdy znak ma przypisany kod ASCII oraz kolejne litery przyjmują kolejne ich wartości:$$a → 97$$$$b → 98$$$$c → 99$$$$d → 100$$$$itd.,$$i ten fakt wykorzystamy w szyfrowaniu/deszyfrowaniu danych.
Przeanalizujmy szyfrowanie litery dla pewnego klucza z zakresu [-25..25].
W implementacji w języku Python użyliśmy dwóch użytecznych funkcji: ord(znak), która zwraca kod ASCII podanego znaku jako argument oraz chr(ASCII), która zwraca znak o danym kocie ASCII.
#*****************www.algorytm.edu.pl****************
def szyfruj(napis, klucz): # napis — zmienna przechowująca tekst do zaszyfrowania
szyfrogram = "" # zmienna przechowująca zaszyfrowany napis
for i in napis: # przegląd kolejnych liter tekstu jawnego
litera = klucz + ord(i) # (*) w postaci kodu ASCII
if litera > ord('z'): # (**) jeśli wyjdziemy poza alfabet z prawej strony (klucz o wartości dodatniej)
litera -= 26
elif litera < ord('a'): # (***) jeśli wyjdziemy poza alfabet z lewej strony (klucz o wartości ujemnej)
litera += 26
szyfrogram += chr(litera) # dokładamy kolejne litery do wyniku, konwertując ASCII na znak
return szyfrogram
# część główna programu
napis = 'abcxyz'
klucz = 2
# szyfrowanie
szyfrogram = szyfruj(napis, klucz) # cdezab
print(szyfrogram)
# deszyfrowanie
napis = szyfruj(szyfrogram, -klucz)
print(napis) # abcxyz