octubre 10, 2024


Explorando el fascinante mundo de Cifrado Cesar con ejemplos de C++

El Cifrado César, también conocido como Cifrado César, es una de las formas de encriptación más antiguas y sencillas. Lleva el nombre de Julio César, quien lo usó para proteger sus mensajes de ser interceptados durante las campañas militares. Esta técnica de cifrado funciona desplazando cada letra del texto un cierto número de posiciones hacia abajo en el alfabeto. El valor de este cambio se conoce como clave de cifrado, que es un valor secreto compartido solo entre el remitente y el receptor.

En este artículo, exploraremos el fascinante mundo de Cifrado Cesar y demostraremos cómo implementarlo en C++. También cubriremos algunas de las limitaciones de esta técnica de cifrado y cómo se puede romper fácilmente. ¡Vamos a sumergirnos!

Comprender los conceptos básicos de Cifrado Cesar

La idea básica detrás de Cifrado Cesar es desplazar cada letra del texto sin formato un cierto número de posiciones hacia abajo en el alfabeto. Por ejemplo, si la clave de cifrado es 3, entonces la letra A sería reemplazada por D, B por E, C por F, y así sucesivamente. La siguiente tabla muestra el cambio alfabético completo en 3 posiciones:

| Texto sin formato | Texto cifrado |
| ——— | ———- |
| un | D |
| B | mi |
| C | F |
| D | G |
| mi | H |
| F | yo |
| G | J |
| H | K |
| yo | L |
| J | m |
| K | norte |
| L | O |
| m | pag |
| norte | Q |
| O | R |
| pag | S |
| Q | T |
| R | tu |
| S | V |
| T | W |
| tu | X |
| V| Y |
| W | Z |
| X | un |
| Y | B |
| Z | C |

Para descifrar el texto cifrado, el receptor debe cambiar cada letra en la dirección opuesta por el mismo número de posiciones. En este caso, la clave de cifrado es 3, por lo que el receptor tendría que cambiar cada letra del alfabeto 3 posiciones hacia arriba.

Implementing Cifrado Cesar in C++

Para implementar Cifrado Cesar en C++, usaremos operaciones aritméticas simples para desplazar cada letra del texto sin formato por la clave de cifrado. Comencemos por escribir una función que tome una cadena de texto sin formato y una clave de cifrado como entradas y devuelva la cadena de texto cifrado.

«`cpp
#incluir

utilizando el espacio de nombres estándar;

string grabadoCesar(string texto sin formato, clave int) {
cadena de texto cifrado = «»;
for(int i = 0; i < texto sin formato.longitud(); i++) {
if(isalpha(texto sin formato[i])) {
char c = texto sin formato[i];
si (es la cena (c))
texto cifrado += (c – ‘A’ + clave) % 26 + ‘A’;
demás
texto cifrado += (c – ‘a’ + clave) % 26 + ‘a’;
}
demás
texto cifrado += texto sin formato[i];
}
devolver texto cifrado;
}

int principal() {
string texto sin formato = «¡Hola, mundo!»;
clave int = 3;
string texto cifrado = cifradoCesar(texto sin formato, clave);
cout << "Texto cifrado: " << texto cifrado << endl;
devolver 0;
}
«`
El código anterior toma una cadena de texto sin formato y una clave de cifrado como entradas y devuelve una cadena de texto cifrado. Comenzamos inicializando una cadena vacía `texto cifrado`. Luego, recorremos cada carácter en la cadena de texto simple usando un bucle `for`. Si el carácter es un alfabeto, lo cambiamos por la clave de cifrado usando algunas operaciones aritméticas simples. Verificamos si el carácter está en mayúsculas o minúsculas, y aplicamos el cambio en consecuencia. Usamos el operador de módulo ` % ` con un valor de 26 para manejar el ajuste alrededor del alfabeto. Finalmente, agregamos el carácter desplazado a la cadena de texto cifrado. Si el carácter no es un alfabeto, simplemente lo agregamos a la cadena de texto cifrado tal cual.

Ahora, si ejecutamos el código anterior, obtenemos el siguiente resultado:

«`
Texto cifrado: ¡Khoor, Zruog!
«`

Como podemos ver, la cadena de texto sin formato `¡Hola, mundo!` se ha cifrado con una clave de cifrado de 3, lo que da como resultado la cadena de texto cifrado `Khoor, Zruog!`.

Breaking Cifrado Cesar

Si bien Cifrado Cesar es una técnica de encriptación simple y fácil de implementar, tiene algunos inconvenientes importantes. Primero, es susceptible a ataques de análisis de frecuencia. Dado que cada letra se desplaza el mismo número de posiciones, la distribución de frecuencia de las letras en el texto cifrado es la misma que en el texto sin formato. Esto hace que sea relativamente fácil para un atacante determinar la clave de cifrado analizando la frecuencia de cada letra en el texto cifrado.

En segundo lugar, Cifrado Cesar es vulnerable a los ataques de fuerza bruta. Dado que la clave de cifrado puede tomar solo 26 valores posibles (uno para cada letra del alfabeto), un atacante puede probar fácilmente todas las claves posibles hasta encontrar la correcta.

Para superar estas limitaciones, se utilizan técnicas de cifrado más avanzadas, como el Estándar de cifrado avanzado (AES). AES es una técnica de cifrado de claves simétricas que utiliza un espacio de claves mucho más grande (128 bits) y emplea varias rondas de cifrado para proporcionar un mayor nivel de seguridad.

Conclusión

En este artículo, exploramos el fascinante mundo de Cifrado Cesar y demostramos cómo implementarlo en C++ usando operaciones aritméticas simples. También discutimos algunas de las limitaciones de esta técnica de cifrado, como la susceptibilidad al análisis de frecuencia y los ataques de fuerza bruta. Si bien Cifrado Cesar sirvió como base para las técnicas de encriptación modernas, ahora está desactualizado y no es adecuado para la comunicación segura. Hoy en día, el cifrado es esencial para la seguridad, la privacidad y la confidencialidad en línea, y se utilizan técnicas de cifrado más avanzadas para proteger la información sensible y confidencial.