septiembre 29, 2024


Dominar el cifrado César en C++: ejemplos para principiantes

La criptografía ha existido durante siglos. En la antigüedad, los ejércitos y los gobernantes usaban varios métodos y técnicas para mantener sus mensajes en secreto y seguros. Uno de los cifrados más simples y más utilizados es el cifrado César. Este cifrado lleva el nombre de Julio César, de quien se dice que lo usó para comunicarse con sus generales.

El cifrado César es un cifrado de sustitución, donde cada letra del texto sin formato se reemplaza por otra letra un número fijo de posiciones hacia abajo en el alfabeto. Por ejemplo, si el turno es 3, entonces A se reemplazaría por D, B se convertiría en E, y así sucesivamente.

En este tutorial, le mostraremos cómo implementar el cifrado César en C++ usando ejemplos simples y fáciles de entender. Cubriremos los conceptos básicos del cifrado, cómo funciona y las diferentes técnicas que se pueden usar para mejorar su seguridad.

1. ¿Qué es el Cifrado César?

El cifrado César es un método simple de cifrado que es fácil de implementar y comprender. El cifrado funciona desplazando cada letra del texto sin formato en un número fijo de posiciones hacia abajo en el alfabeto (en el caso del cifrado César, el desplazamiento es siempre un número entero positivo).

Por ejemplo, si el cambio es 3, entonces la letra A se convertiría en D, la B se convertiría en E, y así sucesivamente. La siguiente tabla muestra el alfabeto completo con cada letra desplazada por un desplazamiento de 3.

Texto sin formato: ABCDEFGHIJKLMNOPQRSTU VWXYZ
Texto cifrado: DEFGHIJKLMNOPQRSTUVWX YZABC

Esto se puede representar matemáticamente como:

Texto cifrado = E (P + k) % 26

Donde P es el texto sin formato, k es el turno (clave) y E es la función de cifrado. La operación de módulo (%) se utiliza para garantizar que el resultado de la suma se mantenga dentro del rango del alfabeto (26 letras).

2. Implementando el Cifrado César en C++

Para implementar el cifrado César en C++, primero debemos definir algunas funciones que manejarán el cifrado y descifrado del texto. Luego podemos usar estas funciones para crear un programa simple que nos permitirá cifrar y descifrar cualquier texto usando el cifrado César.

2.1 Función de cifrado de cifrado César

La función de cifrado toma dos parámetros: el texto sin formato y el cambio (clave). La función devuelve el texto cifrado.

Aquí hay un ejemplo de la función de cifrado de cifrado César en C++:

cifrar cadena (texto sin formato de cadena, cambio int) {
cadena de texto cifrado = «»;
for (int i = 0; i < texto sin formato.longitud(); i++) {
si (es superior (texto sin formato[i])) {
texto cifrado += char(int(texto plano[i] + cambio – 65) % 26 + 65);
}
demás {
texto cifrado += char(int(texto plano[i] + cambio – 97) % 26 + 97);
}
}
devolver texto cifrado;
}

La función toma cada carácter de la cadena de texto sin formato y comprueba si está en mayúsculas o minúsculas. Si el carácter está en mayúsculas, el valor ASCII se desplaza 65 y se realiza la operación de módulo para garantizar que el carácter permanezca dentro del rango del alfabeto.

Se repite el mismo proceso para los caracteres en minúsculas, pero con un cambio de 97 en lugar de 65. Finalmente, se devuelve el texto encriptado.

2.2 Función de descifrado de cifrado César

La función de descifrado toma dos parámetros: el texto cifrado y el cambio (clave). La función devuelve el texto descifrado.

Aquí hay un ejemplo de la función de descifrado de cifrado César en C++:

descifrar cadena (texto cifrado de cadena, desplazamiento int) {
cadena de texto sin formato = «»;
for (int i = 0; i si (es superior (texto cifrado[i])) {
texto plano += char(int(texto cifrado[i] – turno – 65 + 26) % 26 + 65);
}
demás {
texto plano += char(int(texto cifrado[i] – cambio – 97 + 26) % 26 + 97);
}
}
devolver texto sin formato;
}

La función de descifrado es similar a la función de cifrado. Sin embargo, en lugar de desplazar los caracteres hacia la derecha, los desplazamos hacia la izquierda. A continuación, se devuelve el texto sin formato.

3. Creación de un programa de cifrado César simple en C++

Ahora que hemos definido las funciones de cifrado y descifrado, podemos crear un programa simple que nos permitirá cifrar y descifrar cualquier texto utilizando el cifrado César. Aquí hay un ejemplo de un programa de cifrado César simple en C++:

#incluir

#incluir

utilizando el espacio de nombres estándar;

cifrar cadena (texto sin formato de cadena, cambio int);
descifrar cadena (texto cifrado de cadena, desplazamiento int);

int principal() {
cadena de texto sin formato, texto cifrado, texto descifrado;
cambio int;

cout << "Ingrese el texto a cifrar: ";
getline(cin, texto sin formato);

cout << "Ingrese el turno: ";
cin >> desplazamiento;

texto cifrado = cifrar (texto sin formato, cambio);
cout << "Texto cifrado: " << texto cifrado << endl; texto descifrado = descifrar (texto cifrado, desplazamiento);
cout << "Texto descifrado: " << texto descifrado << endl; devolver 0;
}

El programa solicita al usuario que ingrese el texto que desea cifrar y el turno que desea usar para el cifrado César. Luego, el texto se cifra mediante la función de cifrado y se muestra en la pantalla.

El programa también descifra el texto cifrado mediante la función de descifrado y el texto sin formato original se muestra en la pantalla.

4. Mejorar la seguridad del cifrado César

El cifrado César es un cifrado relativamente débil, ya que un atacante podría descifrarlo fácilmente usando la fuerza bruta. Por ejemplo, el valor de cambio podría variar de 1 a 25. Esto significa que un atacante podría probar todos los cambios posibles hasta encontrar el correcto.

Existen algunas técnicas diferentes que se pueden utilizar para mejorar la seguridad del cifrado César. Algunas de estas técnicas incluyen:

4.1 Cambio múltiple

El cambio múltiple es una técnica simple que implica aplicar cambios múltiples al texto sin formato. Por ejemplo, si tenemos un turno de 3 y 5, podríamos alternar entre estos turnos para cada letra del texto sin formato.

Esto haría más difícil para un atacante descifrar el cifrado, ya que tendría que probar todas las combinaciones posibles de turnos.

4.2 Gestión de claves

La gestión de claves es otra técnica que se puede utilizar para mejorar la seguridad del cifrado César. En lugar de utilizar un valor de cambio fijo, la clave podría generarse aleatoriamente para cada mensaje.

Esto haría mucho más difícil para un atacante descifrar el cifrado, ya que tendría que adivinar la clave correcta para cada mensaje.

4.3 Cifrado Vigenère

El cifrado Vigenere es otro cifrado popular que se basa en el cifrado César. Sin embargo, en lugar de usar un valor de cambio fijo, el cifrado Vigenere usa una palabra clave para crear un valor de cambio variable para cada letra en el texto sin formato.

Por ejemplo, si la palabra clave es «CLAVE» y el texto sin formato es «HOLA», la primera letra del texto sin formato «H» se desplazaría 10 (el valor de «K» en el alfabeto), la segunda letra «E» se desplazaría por 4 (el valor de «E» en el alfabeto), y así sucesivamente.

Esta técnica hace que sea mucho más difícil para un atacante descifrar el cifrado, ya que sería necesario adivinar la palabra clave para descifrar el mensaje.

5. Conclusión

En conclusión, el cifrado César es un cifrado simple y fácil de entender que es un buen punto de partida para los principiantes que quieren aprender sobre criptografía. Sin embargo, no es un cifrado seguro y no debe usarse para datos confidenciales.

Le mostramos cómo implementar el cifrado César en C++ usando ejemplos simples y fáciles de entender y proporcionamos algunas técnicas que se pueden usar para mejorar la seguridad del cifrado.

Al dominar el cifrado César, tendrá una buena comprensión de los conceptos de criptografía que le permitirán pasar a técnicas y cifrados más complejos.