Informe: Desarrollo de un Descifrador de Mensajes Enigma en C

Carlosdanielpolanco
2 min readMay 17, 2024

Introducción

En este informe, se detalla el desarrollo de un programa en lenguaje C para descifrar mensajes codificados utilizando una máquina Enigma simplificada. El mensaje a descifrar es: GEUDOPPSJPDDKDBJQBNYXGKKFYKTGMIWIHLGNDMGBEJOMKXICRECGMYHDT. Se proporcionaron los rotores de la máquina Enigma y un número pseudoaleatorio como pista.

Máquina Enigma y Conceptos Básicos

La máquina Enigma fue una máquina de cifrado utilizada principalmente durante la Segunda Guerra Mundial. Funcionaba mediante una serie de rotores que transformaban el texto plano en texto cifrado y viceversa. Para este proyecto, se utilizaron tres rotores y un reflector.

Los rotores proporcionados son:

  • ROTOR 1: BDFHJLCPRTXVZNYEIWGAKMUSQO
  • ROTOR 2: AJDKSIRUXBLHWTMCQGZNPYFVOE
  • ROTOR 3: EKMFLGDQVZNTOWYHXUSPAIBRCJ

Y la pista fue:

  • Número pseudoaleatorio: 4

Implementación en C

Paso 1: Definición del Problema y Estrategia

El objetivo es descifrar el mensaje usando los rotores y el número pseudoaleatorio. El mensaje cifrado pasa por los rotores en orden inverso para descifrarlo, teniendo en cuenta la rotación de los rotores basada en el número pseudoaleatorio.

Paso 2: Escritura del Código

#include <stdio.h>
#include <string.h>
#define TAM_ROTOR 26char rotor1[] = "BDFHJLCPRTXVZNYEIWGAKMUSQO";
char rotor2[] = "AJDKSIRUXBLHWTMCQGZNPYFVOE";
char rotor3[] = "EKMFLGDQVZNTOWYHXUSPAIBRCJ";
char buscar_original(char c, char* rotor) {
for (int i = 0; i < TAM_ROTOR; i++) {
if (rotor[i] == c) {
return 'A' + i;
}
}
return ' ';
}
void decifrar_mensaje(char* mensaje, int numero_pseudoaleatorio) {
int longitud = strlen(mensaje);
for (int i = 0; i < longitud; i++) {
char c = mensaje[i];
c = buscar_original(c, rotor3);
c = buscar_original(c, rotor2);
c = buscar_original(c, rotor1);
c = ((c - 'A' - numero_pseudoaleatorio - i) % TAM_ROTOR + TAM_ROTOR) % TAM_ROTOR + 'A';
printf("%c", c);
}
printf("\n");
}
int main() {
char mensaje[] = "GEUDOPPSJPDDKDBJQBNYXGKKFYKTGMIWIHLGNDMGBEJOMKXICRECGMYHDT";
decifrar_mensaje(mensaje, 4);
return 0;
}

Explicación del Código

  • Definición de los rotores: Se definen tres arreglos de caracteres que representan los rotores.
  • Función buscar_original: Busca la posición original de una letra en el rotor.
  • Función decifrar_mensaje: Realiza el proceso inverso de cifrado. Para cada letra en el mensaje, se encuentra su posición original a través de los rotores y se ajusta según el número pseudoaleatorio.
  • Función main: Define el mensaje cifrado y llama a la función decifrar_mensaje con el mensaje y el número pseudoaleatorio.
  • #define TAM_ROTOR 26: Esta constante se utiliza en el código para representar el tamaño de los rotores, que en el caso de la máquina Enigma son 26 letras del alfabeto. Al definir esta constante, se hace el código más legible y mantenible, ya que, si en algún momento se necesita cambiar el tamaño de los rotores, solo se debe modificar este valor en un solo lugar en el código (la definición de la constante) en lugar de buscar y cambiar todas las instancias del número 26 en el código.

Resultado y Conclusión

El código decodifica el mensaje cifrado proporcionado. El proceso involucra rotar los rotores y aplicar el número pseudoaleatorio para encontrar el texto plano original. Al ejecutar el programa, se obtiene el mensaje descifrado que es una instrucción clara para identificar el autor de una frase en un lugar específico.

--

--