logo

Xifrat de César en criptografia

  • El xifrat de César és una tècnica de xifrat senzilla que va utilitzar Juli Cèsar per enviar missatges secrets als seus aliats. Funciona desplaçant les lletres del missatge de text sense format per un nombre determinat de posicions, conegudes com a majúscules o tecla.
  • La tècnica Caesar Cipher és un dels mètodes més primerencs i senzills de la tècnica de xifratge. És simplement un tipus de xifrat de substitució, és a dir, cada lletra d'un text determinat se substitueix per una lletra amb un nombre fix de posicions a l'alfabet. Per exemple, amb un desplaçament d'1, A se substituiria per B, B es convertiria en C, i així successivament. Aparentment, el mètode porta el nom de Juli Cèsar, que sembla que el va utilitzar per comunicar-se amb els seus funcionaris.
  • Per tant, per xifrar un text determinat necessitem un valor enter, conegut com a desplaçament, que indica el nombre de posicions que s'ha mogut cada lletra del text cap avall.
    El xifrat es pot representar mitjançant l'aritmètica modular transformant primer les lletres en números, segons l'esquema, A = 0, B = 1,..., Z = 25. El xifrat d'una lletra per un desplaçament n es pot descriure matemàticament com.
  • Per exemple, si el desplaçament és 3, aleshores la lletra A se substituiria per la lletra D, la B es convertiria en E, la C es convertiria en F, i així successivament. L'alfabet s'embolica de manera que després de Z, comenci de nou a A.
  • Aquí teniu un exemple de com utilitzar el xifrat de César per xifrar el missatge HELLO amb un canvi de 3:
  1. Anoteu el missatge de text sense format: HOLA
  2. Trieu un valor de canvi. En aquest cas, utilitzarem un torn de 3.
  3. Substituïu cada lletra del missatge de text sense format per la lletra que es troba tres posicions a la dreta de l'alfabet.

H es converteix en K (canvi 3 de H)

E es converteix en H (canvi 3 de E)



L es converteix en O (canvi 3 de L)

formes normals

L es converteix en O (canvi 3 de L)

O es converteix en R (desplaçament 3 de O)



4.El missatge xifrat és ara KHOOR.

  • Per desxifrar el missatge, només heu de desplaçar cada lletra enrere el mateix nombre de posicions. En aquest cas, canviaríeu cada lletra de KHOOR enrere 3 posicions per obtenir el missatge original, HOLA.


E_n(x)=(x+n)mod 26
(Fase de xifratge amb canvi n)

genèrics java

D_n(x)=(x-n)mod 26
(Fase de desxifrat amb canvi n)



Xifrat de César 3

Exemples :

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

Avantatges:

  • Fàcil d'implementar i utilitzar, per tant, és adequat perquè els principiants aprenguin sobre el xifratge.
  • Es pot implementar físicament, com per exemple amb un conjunt de discos giratoris o un joc de cartes, conegut com a escita, que pot ser útil en determinades situacions.
  • Només requereix un petit conjunt d'informació prèviament compartida.
  • Es pot modificar fàcilment per crear una variant més segura, com ara mitjançant l'ús de diversos valors de torn o paraules clau.

Desavantatges:

  • No és segur contra els mètodes de desxifrat moderns.
  • Vulnerable als atacs de text pla conegut, on un atacant té accés tant a la versió xifrada com a la no xifrada dels mateixos missatges.
  • El petit nombre de claus possibles significa que un atacant pot provar fàcilment totes les claus possibles fins que es trobi la correcta, el que el fa vulnerable a un atac de força bruta.
  • No és adequat per a xifratge de text llarg, ja que seria fàcil de trencar.
  • No és adequat per a una comunicació segura, ja que es trenca fàcilment.
  • No proporciona confidencialitat, integritat i autenticitat en un missatge.

Característiques del xifrat César:

  1. Xifrat de substitució: el xifrat de César és un tipus de xifrat de substitució, on cada lletra del text pla se substitueix per una lletra d'un nombre fix de posicions a l'alfabet.
  2. Clau fixa: el xifratge César utilitza una clau fixa, que és el nombre de posicions amb les quals es desplacen les lletres. Aquesta clau és coneguda tant per l'emissor com per al receptor.
  3. Xifratge simètric: el xifratge Caesar és una tècnica de xifratge simètric, el que significa que s'utilitza la mateixa clau tant per al xifratge com per al desxifrat.
  4. Espai de tecles limitat: el xifrat Caesar té un espai de tecles molt limitat de només 26 claus possibles, ja que només hi ha 26 lletres en l'alfabet anglès.
  5. Vulnerable als atacs de força bruta: el xifratge Caesar és vulnerable als atacs de força bruta, ja que només hi ha 26 claus possibles per provar.
  6. Fàcil d'implementar: el xifratge Caesar és molt fàcil d'implementar i només requereix operacions aritmètiques senzilles, per la qual cosa és una opció popular per a tasques de xifratge senzilles.

Regles per al xifrat de Cèsar:

hashtable java
  1. Trieu un nombre entre 1 i 25. Aquest serà el vostre valor de torn.
  2. Escriu les lletres de l'alfabet en ordre, de la A a la Z.
  3. Canvieu cada lletra de l'alfabet pel valor de canvi. Per exemple, si el valor de desplaçament és 3, A es convertiria en D, B es convertiria en E, C es convertiria en F, i així successivament.
  4. Xifra el missatge substituint cada lletra per la lletra desplaçada corresponent. Per exemple, si el valor de canvi és 3, la paraula hola es convertiria en khoor.
  5. Per desxifrar el missatge, només cal invertir el procés desplaçant cada lletra enrere en la mateixa quantitat. Per exemple, si el valor de canvi és 3, el missatge xifrat khoor es convertiria en hello.

Algorisme per al xifrat de César:
Entrada:

  1. Trieu un valor de canvi entre 1 i 25.
  2. Escriu l'abecedari en ordre de la A a la Z.
  3. Creeu un alfabet nou canviant cada lletra de l'alfabet original pel valor de canvi. Per exemple, si el valor del canvi és 3, el nou alfabet seria:
  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. Substituïu cada lletra del missatge per la lletra corresponent del nou alfabet. Per exemple, si el valor de canvi és 3, la paraula hola es convertiria en khoor.
  6. Per desxifrar el missatge, canvieu cada lletra en la mateixa quantitat. Per exemple, si el valor de canvi és 3, el missatge xifrat khoor es convertiria en hello.

Procediment:

  • Travessa el text donat un caràcter a la vegada.
  • Per a cada caràcter, transformeu el caràcter donat segons la regla, depenent de si estem xifrant o desxifrant el text.
  • Retorna la cadena nova generada.

Un programa que rep un text (cadena) i un valor Shift (enter) i retorna el text xifrat.

25 c a k

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

Python 3

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

Sortida
Text : ATTACKATONCE Shift: 4 Cipher: EXXEGOEXSRGI>

Complexitat temporal: O(N) on N és la longitud del text donat
Espai auxiliar: O(N)

Com desxifrar?
Podem escriure una altra funció de xifrar similar a xifrar, que aplicarà el canvi donat en la direcció oposada per desxifrar el text original. Tanmateix, podem utilitzar la propietat cíclica del xifrat sota mòdul, per tant, simplement podem observar

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

Per tant, podem utilitzar la mateixa funció per desxifrar, en canvi, modificarem el valor del canvi de manera que shift = 26-shift (consulteu això per a una mostra d'execució en C++).