logo

Cifrado César en criptografía

  • El cifrado César es una técnica de cifrado simple que utilizó Julio César para enviar mensajes secretos a sus aliados. Funciona desplazando las letras del mensaje de texto plano en un cierto número de posiciones, lo que se conoce como mayúscula o tecla.
  • La técnica de cifrado César es uno de los métodos más antiguos y sencillos de técnica de cifrado. Es simplemente un tipo de cifrado de sustitución, es decir, cada letra de un texto determinado se reemplaza por una letra con un número fijo de posiciones en el alfabeto. Por ejemplo, con un desplazamiento de 1, A sería reemplazado por B, B se convertiría en C, y así sucesivamente. Al parecer, el método lleva el nombre de Julio César, quien aparentemente lo utilizó para comunicarse con sus funcionarios.
  • Por lo tanto, para cifrar un texto determinado necesitamos un valor entero, conocido como desplazamiento, que indica el número de posiciones que ha bajado cada letra del texto.
    El cifrado se puede representar utilizando aritmética modular transformando primero las letras en números, según el esquema, A = 0, B = 1,…, Z = 25. El cifrado de una letra mediante un desplazamiento n se puede describir matemáticamente como.
  • Por ejemplo, si el cambio es 3, entonces la letra A sería reemplazada por la letra D, la B se convertiría en E, la C se convertiría en F, y así sucesivamente. El alfabeto se enrolla de modo que después de Z, comienza nuevamente en A.
  • A continuación se muestra un ejemplo de cómo utilizar el cifrado César para cifrar el mensaje HOLA con un desplazamiento de 3:
  1. Escribe el mensaje en texto plano: HOLA
  2. Elija un valor de desplazamiento. En este caso utilizaremos un turno de 3.
  3. Reemplace cada letra del mensaje de texto sin formato con la letra que está tres posiciones a la derecha en el alfabeto.

H se convierte en K (cambio 3 de H)

E se convierte en H (cambio 3 de E)



L se convierte en O (cambio 3 de L)

mapa iterativo java

L se convierte en O (cambio 3 de L)

O se convierte en R (cambio 3 de O)



4.El mensaje cifrado ahora es KHOOR.

banda base versus banda ancha
  • Para descifrar el mensaje, simplemente debe desplazar cada letra hacia atrás el mismo número de posiciones. En este caso, deberías desplazar cada letra en KHOOR 3 posiciones hacia atrás para obtener el mensaje original, HOLA.


E_n(x)=(x+n)mod 26
(Fase de cifrado con turno n)

D_n(x)=(x-n)mod 26
(Fase de descifrado con turno n)



Cifrado César 3

Ejemplos:

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

Ventajas:

  • Por lo tanto, es fácil de implementar y usar, lo que lo hace adecuado para que los principiantes aprendan sobre cifrado.
  • Puede implementarse físicamente, como por ejemplo con un conjunto de discos giratorios o un conjunto de cartas, conocido como escítale, que puede resultar útil en determinadas situaciones.
  • Sólo requiere un pequeño conjunto de información previamente compartida.
  • Se puede modificar fácilmente para crear una variante más segura, como mediante el uso de múltiples valores de desplazamiento o palabras clave.

Desventajas:

  • No es seguro contra los métodos de descifrado modernos.
  • Vulnerable a ataques de texto sin formato conocido, donde un atacante tiene acceso a las versiones cifradas y no cifradas de los mismos mensajes.
  • La pequeña cantidad de claves posibles significa que un atacante puede probar fácilmente todas las claves posibles hasta encontrar la correcta, lo que lo hace vulnerable a un ataque de fuerza bruta.
  • No es adecuado para el cifrado de textos largos, ya que sería fácil de descifrar.
  • No es adecuado para comunicaciones seguras ya que se rompe fácilmente.
  • No proporciona confidencialidad, integridad y autenticidad en un mensaje.

Características del cifrado César:

  1. Cifrado de sustitución: el cifrado César es un tipo de cifrado de sustitución, donde cada letra del texto sin formato se reemplaza por una letra en un número fijo de posiciones hacia abajo en el alfabeto.
  2. Clave fija: el cifrado César utiliza una clave fija, que es el número de posiciones en las que se desplazan las letras. Esta clave es conocida tanto por el remitente como por el receptor.
  3. Cifrado simétrico: el cifrado César es una técnica de cifrado simétrico, lo que significa que se utiliza la misma clave tanto para el cifrado como para el descifrado.
  4. Espacio de claves limitado: el cifrado César tiene un espacio de claves muy limitado de sólo 26 claves posibles, ya que sólo hay 26 letras en el alfabeto inglés.
  5. Vulnerable a ataques de fuerza bruta: el cifrado César es vulnerable a ataques de fuerza bruta, ya que sólo hay 26 claves posibles para probar.
  6. Fácil de implementar: el cifrado César es muy fácil de implementar y solo requiere operaciones aritméticas simples, lo que lo convierte en una opción popular para tareas de cifrado simples.

Reglas para el cifrado César:

  1. Elija un número entre 1 y 25. Este será el valor de su turno.
  2. Escribe las letras del alfabeto en orden, de la A a la Z.
  3. Cambie cada letra del alfabeto según el valor de desplazamiento. Por ejemplo, si el valor de desplazamiento es 3, A se convertiría en D, B se convertiría en E, C se convertiría en F, y así sucesivamente.
  4. Cifre su mensaje reemplazando cada letra con la letra desplazada correspondiente. Por ejemplo, si el valor de desplazamiento es 3, la palabra hola se convertiría en khoor.
  5. Para descifrar el mensaje, simplemente invierta el proceso moviendo cada letra hacia atrás en la misma cantidad. Por ejemplo, si el valor de desplazamiento es 3, el mensaje cifrado khoor se convertiría en hola.

Algoritmo para el cifrado César:
Aporte:

  1. Elija un valor de desplazamiento entre 1 y 25.
  2. Escribe el alfabeto en orden de la A a la Z.
  3. Cree un nuevo alfabeto cambiando cada letra del alfabeto original según el valor de desplazamiento. Por ejemplo, si el valor de desplazamiento es 3, el nuevo alfabeto sería:
  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. Reemplace cada letra del mensaje con la letra correspondiente del nuevo alfabeto. Por ejemplo, si el valor de desplazamiento es 3, la palabra hola se convertiría en khoor.
  6. Para descifrar el mensaje, mueva cada letra hacia atrás en la misma cantidad. Por ejemplo, si el valor de desplazamiento es 3, el mensaje cifrado khoor se convertiría en hola.

Procedimiento:

instalación experta
  • Recorre el texto dado un carácter a la vez.
  • Para cada carácter, transforma el carácter dado según la regla, dependiendo de si estamos cifrando o descifrando el texto.
  • Devuelve la nueva cadena generada.

Un programa que recibe un texto (cadena) y un valor de cambio (entero) y devuelve el texto cifrado.

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

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

Producción
Text : ATTACKATONCE Shift: 4 Cipher: EXXEGOEXSRGI>

Complejidad del tiempo: O(N) donde N es la longitud del texto dado
Espacio auxiliar: EN)

¿Cómo descifrar?
Podemos escribir otra función de descifrar similar a cifrar, que aplicará el desplazamiento dado en la dirección opuesta para descifrar el texto original. Sin embargo, podemos usar la propiedad cíclica del cifrado bajo módulo, por lo que simplemente podemos observar

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

Por lo tanto, podemos usar la misma función para descifrar; en su lugar, modificaremos el valor de desplazamiento de modo que shift = 26-shift (consulte esto para ver una ejecución de muestra en C++).