logo

Cifratore di Cesare in crittografia

  • Il cifrario di Cesare è una semplice tecnica di crittografia utilizzata da Giulio Cesare per inviare messaggi segreti ai suoi alleati. Funziona spostando le lettere nel messaggio di testo in chiaro di un certo numero di posizioni, note come spostamento o tasto.
  • La tecnica del cifrario di Cesare è uno dei primi e più semplici metodi di crittografia. È semplicemente un tipo di cifrario a sostituzione, ovvero ogni lettera di un dato testo viene sostituita da una lettera con un numero fisso di posizioni più in basso nell'alfabeto. Ad esempio, con uno spostamento di 1, A verrebbe sostituito da B, B diventerebbe C e così via. Apparentemente il metodo prende il nome da Giulio Cesare, che a quanto pare lo usò per comunicare con i suoi funzionari.
  • Quindi per cifrare un dato testo abbiamo bisogno di un valore intero, noto come spostamento, che indica il numero di posizioni in cui è stata spostata verso il basso ciascuna lettera del testo.
    La crittografia può essere rappresentata utilizzando l'aritmetica modulare trasformando prima le lettere in numeri, secondo lo schema A = 0, B = 1,…, Z = 25. La crittografia di una lettera mediante uno spostamento n può essere descritta matematicamente come.
  • Ad esempio, se lo spostamento è 3, la lettera A verrebbe sostituita dalla lettera D, B diventerebbe E, C diventerebbe F e così via. L'alfabeto è avvolto in modo che dopo la Z ricominci dalla A.
  • Ecco un esempio di come utilizzare il codice Caesar per crittografare il messaggio CIAO con uno spostamento di 3:
  1. Annotare il messaggio in chiaro: CIAO
  2. Scegli un valore di spostamento. In questo caso, utilizzeremo uno spostamento di 3.
  3. Sostituisci ogni lettera nel messaggio di testo normale con la lettera che si trova tre posizioni a destra nell'alfabeto.

H diventa K (spostamento 3 da H)

E diventa H (sposta 3 da E)



L diventa O (sposta 3 da L)

colori Java

L diventa O (sposta 3 da L)

O diventa R (sposta 3 da O)



4.Il messaggio crittografato è ora KHOOR.

  • Per decifrare il messaggio, devi semplicemente spostare indietro ciascuna lettera dello stesso numero di posizioni. In questo caso, sposteresti ciascuna lettera in KHOOR indietro di 3 posizioni per ottenere il messaggio originale, CIAO.


E_n(x)=(x+n)mod 26
(Fase di crittografia con turno n)

interfaccia comparabile in Java

D_n(x)=(x-n)mod 26
(Fase di decifratura con turno n)



Cifratore di Cesare 3

Esempi:

 Text : ABCDEFGHIJKLMNOPQRSTUVWXYZ Shift : 23 Cipher : XYZABCDEFGHIJKLMNOPQRSTUVW Text : ATTACKATONCE Shift : 4 Cipher : EXXEGOEXSRGI>

Vantaggi:

  • Facile da implementare e utilizzare, quindi adatto ai principianti per conoscere la crittografia.
  • Può essere implementato fisicamente, ad esempio con un set di dischi rotanti o un set di carte, noto come scitale, che può essere utile in determinate situazioni.
  • Richiede solo un piccolo set di informazioni pre-condivise.
  • Può essere modificato facilmente per creare una variante più sicura, ad esempio utilizzando più valori di spostamento o parole chiave.

Svantaggi:

  • Non è sicuro contro i moderni metodi di decrittazione.
  • Vulnerabile agli attacchi con testo in chiaro, in cui un utente malintenzionato ha accesso sia alla versione crittografata che a quella non crittografata degli stessi messaggi.
  • Il numero limitato di chiavi possibili significa che un utente malintenzionato può facilmente provare tutte le chiavi possibili finché non trova quella corretta, rendendolo vulnerabile a un attacco di forza bruta.
  • Non è adatto per la crittografia di testi lunghi poiché sarebbe facile da decifrare.
  • Non è adatto per comunicazioni sicure poiché si rompe facilmente.
  • Non fornisce riservatezza, integrità e autenticità in un messaggio.

Caratteristiche del cifrario Cesare:

  1. Cifrario a sostituzione: il cifrario di Cesare è un tipo di cifrario a sostituzione, in cui ogni lettera del testo in chiaro viene sostituita da una lettera ad un numero fisso di posizioni più in basso nell'alfabeto.
  2. Chiave fissa: il codice di Cesare utilizza una chiave fissa, che è il numero di posizioni in base alle quali le lettere vengono spostate. Questa chiave è nota sia al mittente che al destinatario.
  3. Crittografia simmetrica: il codice Caesar è una tecnica di crittografia simmetrica, il che significa che la stessa chiave viene utilizzata sia per la crittografia che per la decrittografia.
  4. Spazio di chiave limitato: il cifrario di Cesare ha uno spazio di chiave molto limitato di sole 26 chiavi possibili, poiché ci sono solo 26 lettere nell'alfabeto inglese.
  5. Vulnerabile agli attacchi di forza bruta: il codice Caesar è vulnerabile agli attacchi di forza bruta, poiché ci sono solo 26 chiavi possibili da provare.
  6. Facile da implementare: il codice Caesar è molto semplice da implementare e richiede solo semplici operazioni aritmetiche, rendendolo una scelta popolare per semplici attività di crittografia.

Regole per il cifrario di Cesare:

cos'è un file system linux
  1. Scegli un numero compreso tra 1 e 25. Questo sarà il tuo valore di spostamento.
  2. Scrivi le lettere dell'alfabeto in ordine, dalla A alla Z.
  3. Sposta ciascuna lettera dell'alfabeto in base al valore di spostamento. Ad esempio, se il valore di spostamento è 3, A diventerebbe D, B diventerebbe E, C diventerebbe F e così via.
  4. Crittografa il tuo messaggio sostituendo ogni lettera con la lettera spostata corrispondente. Ad esempio, se il valore di spostamento è 3, la parola ciao diventerebbe khoor.
  5. Per decrittografare il messaggio, è sufficiente invertire il processo spostando indietro ciascuna lettera della stessa quantità. Ad esempio, se il valore di spostamento è 3, il messaggio crittografato khoor diventerebbe ciao.

Algoritmo per il cifrario di Cesare:
Ingresso:

  1. Scegli un valore di spostamento compreso tra 1 e 25.
  2. Scrivi l'alfabeto in ordine dalla A alla Z.
  3. Crea un nuovo alfabeto spostando ciascuna lettera dell'alfabeto originale in base al valore di spostamento. Ad esempio, se il valore di spostamento è 3, il nuovo alfabeto sarebbe:
  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. Sostituisci ogni lettera del messaggio con la lettera corrispondente del nuovo alfabeto. Ad esempio, se il valore di spostamento è 3, la parola ciao diventerebbe khoor.
  6. Per decifrare il messaggio, sposta indietro ciascuna lettera della stessa quantità. Ad esempio, se il valore di spostamento è 3, il messaggio crittografato khoor diventerebbe ciao.

Procedura:

  • Attraversa il testo dato un carattere alla volta.
  • Per ogni carattere, trasforma il carattere indicato secondo la regola, a seconda che stiamo crittografando o decrittografando il testo.
  • Restituisce la nuova stringa generata.

Un programma che riceve un testo (stringa) e un valore Shift (intero) e restituisce il testo crittografato.

nell'espressione regolare Java

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; }>
>
>

Giava

//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 >
>
>

Javascript

> //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>
>
>

Produzione
Text : ATTACKATONCE Shift: 4 Cipher: EXXEGOEXSRGI>

Complessità temporale: O(N) dove N è la lunghezza del testo specificato
Spazio ausiliario: SU)

Come decifrare?
Possiamo scrivere un'altra funzione decrypt simile a encrypt, che applicherà lo spostamento indicato nella direzione opposta per decrittografare il testo originale. Tuttavia possiamo usare la proprietà ciclica del cifrario sotto modulo, quindi possiamo semplicemente osservare

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

Pertanto, possiamo utilizzare la stessa funzione per decrittografare, invece, modificheremo il valore di spostamento in modo tale che spostamento = 26-shift (fare riferimento a questo per un esempio eseguito in C++).