Cifrul lui Cezar
Ce este cifrul lui Cezar?
Cifrul lui Cezar, cunoscut și sub numele de cifru cu deplasare sau cifru al substituției, reprezintă una
dintre cele mai familiare tehnici de criptare. În acest procedeu, fiecare literă din textul original este
înlocuită cu alta din alfabet, situată la o anumită distanță fixă în ordine. De exemplu, în cazul unei
deplasări de trei poziții în alfabetul limbii engleze, litera A devine D, B devine E și așa mai departe.
Acest procedeu poartă numele lui Iulius Cezar, care l-a utilizat pentru a comunica cu generalii săi.
Conform lui Suetoniu, îl folosea cu o
deplasare de 3 pentru protejarea mesajelor cu importanță militară:
Dacă avea ceva confidențial de comunicat, scria încifrat, adică schimba ordinea literelor din alfabet, astfel încât nu se putea înțelege nici un cuvânt. Dacă cineva dorește să descifreze și să înțeleagă, trebuie să înlocuiască a patra literă din alfabet, adică D, cu A, și așa mai departe pentru celelalte.
—Suetoniu, Viața lui Iulius Cezar 56
Transformarea poate fi reprezentată printr-o aliniere a două alfabete:
cheia: 3
alfabet englez: ABCDEFGHIJKLMNOPQRSTUVWXYZ
alfabet criptat: DEFGHIJKLMNOPQRSTUVWXYZABC
Pentru a decripta mesajul, destinatarul trebuie să știe deplasarea utilizată și să aplice operația inversă: să
înlocuiască fiecare literă criptată cu litera corespunzătoare din alfabetul original.
Este important de menționat că acest cifru este foarte simplu și ușor de spart, deoarece există
doar 25 de combinații posibile (pentru alfabetul englezesc), ceea ce face ca criptarea să fie vulnerabilă la
atacuri brute force sau analize de frecvență.
Criptează Mesajul
Codul in c++ pentru criptare
for(i=0;i<l;i++)
if(s[i]!=' ')
{
if(s[i]>='a' && s[i]<='z')
{
c=s[i]+n;
if(c>'z')
c=c-26;
s[i]=(char)c;
}
else if(s[i]>='A' && s[i]<='Z')
{
c=s[i]+n;
if(c>'Z')
c=c-26;
s[i]=(char)c;
}
}
Decriptează Mesajul
Codul in c++ pentru decriptare
for(i=0;i<l;i++)
if(s[i]!=' ')
{
if(s[i]>='a' && s[i]<='z')
{
c=s[i]-n;
if(c<'a')
c=c+26;
s[i]=(char)c;
}
else if(s[i]>='A' && s[i]<='Z')
{
c=s[i]-n;
if(c<'A')
c=c+26;
s[i]=(char)c;
}
}