logo

Cifrul Caesar în criptografie

  • Cifrul Caesar este o tehnică simplă de criptare care a fost folosită de Iulius Caesar pentru a trimite mesaje secrete aliaților săi. Funcționează prin deplasarea literelor din mesajul text simplu cu un anumit număr de poziții, cunoscut sub numele de shift sau tastă.
  • Tehnica Caesar Cipher este una dintre cele mai vechi și simple metode de criptare. Este pur și simplu un tip de cifr de substituție, adică fiecare literă a unui text dat este înlocuită cu o literă cu un număr fix de poziții de-a lungul alfabetului. De exemplu, cu o deplasare de 1, A ar fi înlocuit cu B, B ar deveni C și așa mai departe. Se pare că metoda poartă numele lui Iulius Caesar, care se pare că a folosit-o pentru a comunica cu oficialii săi.
  • Astfel, pentru a cifra un text dat avem nevoie de o valoare întreagă, cunoscută sub numele de deplasare, care indică numărul de poziții în care fiecare literă a textului a fost mutată în jos.
    Criptarea poate fi reprezentată folosind aritmetica modulară prin transformarea mai întâi a literelor în cifre, conform schemei, A = 0, B = 1,…, Z = 25. Criptarea unei litere printr-o deplasare n poate fi descrisă matematic ca.
  • De exemplu, dacă schimbarea este 3, atunci litera A ar fi înlocuită cu litera D, B ar deveni E, C ar deveni F și așa mai departe. Alfabetul este înfășurat astfel încât, după Z, începe înapoi la A.
  • Iată un exemplu de utilizare a cifrului Caesar pentru a cripta mesajul HELLO cu o schimbare de 3:
  1. Notează mesajul text simplu: SALUT
  2. Alegeți o valoare de schimbare. În acest caz, vom folosi o schimbare de 3.
  3. Înlocuiți fiecare literă din mesajul text simplu cu litera care se află la trei poziții la dreapta în alfabet.

H devine K (deplasarea 3 de la H)

E devine H (deplasarea 3 de la E)



L devine O (schimbarea 3 de la L)

adăugați în matrice java

L devine O (schimbarea 3 de la L)

O devine R (deplasarea 3 de la O)



4.Mesajul criptat este acum KHOOR.

interfață comparabilă în java
  • Pentru a decripta mesajul, trebuie pur și simplu să mutați fiecare literă înapoi cu același număr de poziții. În acest caz, ați muta fiecare literă din KHOOR înapoi cu 3 poziții pentru a obține mesajul original, SALUT.


E_n(x)=(x+n)mod 26
(Faza de criptare cu shift n)

D_n(x)=(x-n)mod 26
(Faza de decriptare cu schimbarea n)



Caesar Cipher 3

Exemple:

caracter de evadare java
 Text : ABCDEFGHIJKLMNOPQRSTUVWXYZ Shift : 23 Cipher : XYZABCDEFGHIJKLMNOPQRSTUVW Text : ATTACKATONCE Shift : 4 Cipher : EXXEGOEXSRGI>

Avantaje:

  • Ușor de implementat și utilizat astfel, făcând potrivit pentru începători să învețe despre criptare.
  • Poate fi implementat fizic, cum ar fi cu un set de discuri rotative sau un set de cărți, cunoscut sub numele de scytale, care poate fi util în anumite situații.
  • Necesită doar un set mic de informații pre-partajate.
  • Poate fi modificat cu ușurință pentru a crea o variantă mai sigură, cum ar fi prin utilizarea mai multor valori sau cuvinte cheie.

Dezavantaje:

  • Nu este sigur împotriva metodelor moderne de decriptare.
  • Vulnerabil la atacurile cunoscute în text simplu, în care un atacator are acces atât la versiunile criptate, cât și la cele necriptate ale acelorași mesaje.
  • Numărul mic de chei posibile înseamnă că un atacator poate încerca cu ușurință toate cheile posibile până când este găsită cea corectă, făcându-l vulnerabil la un atac cu forță brută.
  • Nu este potrivit pentru criptarea textului lung, deoarece ar fi ușor de spart.
  • Nu este potrivit pentru comunicații sigure, deoarece este ușor de spart.
  • Nu oferă confidențialitate, integritate și autenticitate într-un mesaj.

Caracteristicile cifrului Caesar:

  1. Cifrul de substituție: Cifrul Caesar este un tip de cifr de substituție, în care fiecare literă din textul simplu este înlocuită cu o literă cu un număr fix de poziții de-a lungul alfabetului.
  2. Cheie fixă: Cifrul Caesar folosește o cheie fixă, care este numărul de poziții prin care sunt deplasate literele. Această cheie este cunoscută atât de expeditor, cât și de destinatar.
  3. Criptare simetrică: Cifrul Caesar este o tehnică de criptare simetrică, ceea ce înseamnă că aceeași cheie este utilizată atât pentru criptare, cât și pentru decriptare.
  4. Spațiu de taste limitat: Cifrul Caesar are un spațiu de taste foarte limitat de doar 26 de chei posibile, deoarece există doar 26 de litere în alfabetul englez.
  5. Vulnerabil la atacuri cu forță brută: Cifrul Caesar este vulnerabil la atacuri cu forță brută, deoarece există doar 26 de chei posibile de încercat.
  6. Ușor de implementat: Cifrul Caesar este foarte ușor de implementat și necesită doar operații aritmetice simple, ceea ce îl face o alegere populară pentru sarcini simple de criptare.

Reguli pentru Cifrul Caesar:

  1. Alegeți un număr între 1 și 25. Aceasta va fi valoarea dvs. de schimbare.
  2. Scrieți literele alfabetului în ordine, de la A la Z.
  3. Schimbați fiecare literă a alfabetului cu valoarea de schimbare. De exemplu, dacă valoarea deplasării este 3, A ar deveni D, B ar deveni E, C ar deveni F și așa mai departe.
  4. Criptați mesajul dvs. înlocuind fiecare literă cu litera deplasată corespunzătoare. De exemplu, dacă valoarea deplasării este 3, cuvântul salut va deveni khoor.
  5. Pentru a decripta mesajul, pur și simplu inversați procesul, schimbând fiecare literă înapoi cu aceeași cantitate. De exemplu, dacă valoarea shift este 3, mesajul criptat khoor va deveni salut.

Algoritm pentru Cifrul Caesar:
Intrare:

  1. Alegeți o valoare de schimbare între 1 și 25.
  2. Scrieți alfabetul în ordine de la A la Z.
  3. Creați un nou alfabet schimbând fiecare literă a alfabetului original cu valoarea de schimbare. De exemplu, dacă valoarea deplasării este 3, noul alfabet ar fi:
  4. 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
    D E F G H I J K L M N O P Q R S T U V W X Y Z A B C
  5. Înlocuiți fiecare literă a mesajului cu litera corespunzătoare din noul alfabet. De exemplu, dacă valoarea deplasării este 3, cuvântul salut va deveni khoor.
  6. Pentru a decripta mesajul, mutați fiecare literă înapoi cu aceeași sumă. De exemplu, dacă valoarea shift este 3, mesajul criptat khoor va deveni salut.

Procedură:

sincronizare java
  • Traversați textul dat câte un caracter.
  • Pentru fiecare caracter, transformați caracterul dat conform regulii, în funcție de dacă criptăm sau decriptăm textul.
  • Returnează noul șir generat.

Un program care primește un text (șir) și o valoare Shift (întreg) și returnează textul criptat.

C++

// A C++ program to illustrate Caesar Cipher Technique> #include> using> namespace> std;> // This function receives text and shift and> // returns the encrypted text> string encrypt(string text,>int> s)> {> >string result =>''>;> >// traverse text> >for> (>int> i = 0; i // apply transformation to each character // Encrypt Uppercase letters if (isupper(text[i])) result += char(int(text[i] + s - 65) % 26 + 65); // Encrypt Lowercase letters else result += char(int(text[i] + s - 97) % 26 + 97); } // Return the resulting string return result; } // Driver program to test the above function int main() { string text = 'ATTACKATONCE'; int s = 4; cout << 'Text : ' << text; cout << ' Shift: ' << s; cout << ' Cipher: ' << encrypt(text, s); return 0; }>
>
>

Java

//A Java Program to illustrate Caesar Cipher Technique> class> CaesarCipher> {> >// Encrypts text using a shift of s> >public> static> StringBuffer encrypt(String text,>int> s)> >{> >StringBuffer result=>new> StringBuffer();> >for> (>int> i=>0>; i { if (Character.isUpperCase(text.charAt(i))) { char ch = (char)(((int)text.charAt(i) + s - 65) % 26 + 65); result.append(ch); } else { char ch = (char)(((int)text.charAt(i) + s - 97) % 26 + 97); result.append(ch); } } return result; } // Driver code public static void main(String[] args) { String text = 'ATTACKATONCE'; int s = 4; System.out.println('Text : ' + text); System.out.println('Shift : ' + s); System.out.println('Cipher: ' + encrypt(text, s)); } }>
>
>

Python3

#A python program to illustrate Caesar Cipher Technique> def> encrypt(text,s):> >result>=> ''> ># traverse text> >for> i>in> range>(>len>(text)):> >char>=> text[i]> ># Encrypt uppercase characters> >if> (char.isupper()):> >result>+>=> chr>((>ord>(char)>+> s>->65>)>%> 26> +> 65>)> ># Encrypt lowercase characters> >else>:> >result>+>=> chr>((>ord>(char)>+> s>-> 97>)>%> 26> +> 97>)> >return> result> #check the above function> text>=> 'ATTACKATONCE'> s>=> 4> print> (>'Text : '> +> text)> print> (>'Shift : '> +> str>(s))> print> (>'Cipher: '> +> encrypt(text,s))>
>
>

C#

// A C# Program to illustrate Caesar Cipher Technique> using> System;> using> System.Text;> public> class> CaesarCipher> {> >// Encrypts text using a shift on s> >public> static> StringBuilder encrypt(String text,>int> s)> >{> >StringBuilder result=>new> StringBuilder();> >for> (>int> i=0; i { if (char.IsUpper(text[i])) { char ch = (char)(((int)text[i] + s - 65) % 26 + 65); result.Append(ch); } else { char ch = (char)(((int)text[i] + s - 97) % 26 + 97); result.Append(ch); } } return result; } // Driver code public static void Main(String[] args) { String text = 'ATTACKATONCE'; int s = 4; Console.WriteLine('Text : ' + text); Console.WriteLine('Shift : ' + s); Console.WriteLine('Cipher: ' + encrypt(text, s)); } } /* This code contributed by PrinciRaj1992 */>
>
>

PHP

// A PHP program to illustrate Caesar // Cipher Technique // This function receives text and shift // and returns the encrypted text function encrypt($text, $s) { $result = ''; // traverse text for ($i = 0; $i >>>
>                      
> //A Javascript Program to illustrate Caesar Cipher Technique> > >// Encrypts text using a shift on s> >function> encrypt(text, s)> >{> >let result=>''> >for> (let i = 0; i { let char = text[i]; if (char.toUpperCase(text[i])) { let ch = String.fromCharCode((char.charCodeAt(0) + s-65) % 26 + 65); result += ch; } else { let ch = String.fromCharCode((char.charCodeAt(0) + s-97) % 26 + 97); result += ch; } } return result; } // Driver code let text = 'ATTACKATONCE'; let s = 4; document.write('Text : ' + text + ' '); document.write('Shift : ' + s + ' '); document.write('Cipher: ' + encrypt(text, s) + ' '); // This code is contributed by avanitrachhadiya2155>
>
>

Ieșire
Text : ATTACKATONCE Shift: 4 Cipher: EXXEGOEXSRGI>

Complexitatea timpului: O(N) unde N este lungimea textului dat
Spatiu auxiliar: PE)

Cum se decriptează?
Putem fie să scriem o altă funcție de decriptare similară cu criptarea, care va aplica schimbarea dată în direcția opusă pentru a decripta textul original. Cu toate acestea, putem folosi proprietatea ciclică a cifrului sub modulo, prin urmare putem observa pur și simplu

Cipher(n) = De-cipher(26-n)>

Prin urmare, putem folosi aceeași funcție pentru a decripta, în schimb, vom modifica valoarea shift astfel încât shift = 26-shift (consultați aceasta pentru un exemplu de rulare în C++).