Está en la página 1de 9

UNIVERSIDAD DE GUADALAJARA

CENTRO UNIVERSITARIO DE CIENCIAS EXACTAS E INGENIERIAS

(CUCEI)

 Nombre de la actividad: Programa 05. Encriptación


 Nombre de la materia: Estructuras de Datos II
 Sección: D10
 Nombre del profesor: Ortega Sánchez Noé
 Nombre del alumno: Martínez Aviña Roberto Carlos
 Código del alumno: 219819892
 Fecha de elaboración: 23/Noviembre/2023
INTRODUCCION
El presente proyecto se centra en la implementación del algoritmo de Estándar de Cifrado
de Datos (DES) en un programa desarrollado en C++. El DES es un algoritmo clásico que
ha sido ampliamente utilizado para la encriptación de datos. El objetivo de este proyecto
es proporcionar a los usuarios una herramienta práctica y eficiente para la encriptación y
desencriptación de mensajes de texto y archivos, utilizando un enfoque basado en menús
para una fácil interacción.
La generación de claves, la manipulación de archivos y la atención a consideraciones de
seguridad son aspectos clave que se abordan en este proyecto. Se presenta una interfaz
de usuario intuitiva que permite a los usuarios seleccionar entre diversas opciones, como
encriptar o desencriptar texto, así como archivos en diferentes formatos. Además, se
exploran aspectos relacionados con la seguridad y se ofrecen sugerencias para mejorar la
robustez del programa.
Este informe detalla la estructura del programa, los procesos de encriptación y
desencriptación, así como los desafíos enfrentados durante la implementación. Asimismo,
se destacan aspectos clave del diseño, como la generación de claves y la manipulación
de archivos, proporcionando una visión integral del proyecto.
EXPLICACIÓN DEL CODIGO DEL PROGRAMA

Clase DES

MIEMBROS PRIVADOS

1. bitset<48> subKeys[16]:
 Este arreglo almacena las 16 subclaves generadas durante el proceso de
cifrado/descifrado. Cada subclave es de 48 bits y se utiliza en las rondas del algoritmo
DES.

MÉTODOS PRIVADOS

1. IP(const bitset<64>& plain) -> bitset<64>


 Descripción: Realiza la permutación inicial (IP) en el bloque de texto plano.
 Entrada: Recibe un bloque de texto plano representado como un bitset de 64 bits.
 Proceso: Aplica la permutación inicial utilizando la tabla ip.
 Salida: Devuelve un bloque de 64 bits después de la permutación inicial.
2. IP_1(const bitset<64>& bits) -> bitset<64>
 Descripción: Realiza la permutación inversa (IP-1) en el bloque de texto cifrado.
 Entrada: Recibe un bloque de texto cifrado representado como un bitset de 64 bits.
 Proceso: Aplica la permutación inversa utilizando la tabla ip.
 Salida: Devuelve un bloque de 64 bits después de la permutación inversa.
3. f(const bitset<32>& right, const bitset<48>& subKey) -> bitset<32>
 Descripción: Implementa la función redonda de Feistel.
 Entrada: Recibe el bloque derecho de 32 bits y la subclave de 48 bits.
 Proceso: Realiza la expansión E, realiza una operación XOR con la subclave, aplica
sustituciones mediante las S-Box y realiza la permutación P.
 Salida: Devuelve un bloque de 32 bits que será utilizado en la siguiente ronda.
4. generateSubKeys(const bitset<64>& key) -> void
 Descripción: Genera las 16 subclaves a partir de la clave original.
 Entrada: Recibe la clave original de 64 bits.
 Proceso: Aplica las permutaciones PC-1 y PC-2, y realiza desplazamientos circulares
para generar las 16 subclaves.
 Salida: Almacena las 16 subclaves en el arreglo subKeys.

Métodos Públicos

5. DES()
 Descripción: Constructor de la clase DES.
6. encrypt(const bitset<64>& plain, const bitset<64>& key) -> bitset<64>
 Descripción: Realiza el cifrado DES.
 Entrada: Recibe el bloque de texto plano y la clave, ambos representados como
bitsets de 64 bits.
 Proceso: Aplica la permutación inicial, realiza 16 rondas de Feistel, y finalmente
aplica la permutación inversa.
 Salida: Devuelve el bloque de texto cifrado.
7. decrypt(const bitset<64>& plain, const bitset<64>& key) -> bitset<64>
 Descripción: Realiza el descifrado DES.
 Entrada: Recibe el bloque de texto cifrado y la clave, ambos representados como
bitsets de 64 bits.
 Proceso: Similar al cifrado, pero utiliza las subclaves en orden inverso.
 Salida: Devuelve el bloque de texto descifrado.
8. ~DES()
 Descripción: Destructor de la clase DES.
Comentarios sobre el funcionamiento de los métodos para la encriptación DES

Generación de Claves:

 El programa genera una clave de 64 bits a partir de una cadena y la utiliza para
encriptar y desencriptar. Ten en cuenta que la clave utilizada en DES debería tener 56
bits, con los 8 bits restantes utilizados para paridad.
Menú e Interacción con el Usuario:
El programa tiene un menú fácil de usar que permite a los usuarios elegir entre diferentes
opciones, como encriptar/desencriptar texto o archivos. La entrada del usuario se maneja
bien.
Encriptación/Desencriptación de Archivos:

 El programa incluye funcionalidades para encriptar y desencriptar archivos. Lee el


contenido de un archivo en bloques de 64 bits, aplica encriptación o desencriptación
DES y escribe el resultado de nuevo en un archivo. Esta es una buena característica
para manejar cantidades mayores de datos.
Interfaz de Usuario:

 La interfaz de consola es clara y está bien organizada, facilitando la navegación del


usuario a través de diferentes opciones.
Manejo de Claves:

 Aunque el programa toma una clave como entrada, en un escenario del mundo real,
puede ser útil considerar métodos más seguros para el intercambio y la gestión de
claves.

RESUMEN Y CONCLUSIONES:
En conclusión, este proyecto ha logrado implementar con éxito el algoritmo DES,
ofreciendo a los usuarios una herramienta versátil para proteger la confidencialidad de sus
datos. La combinación de una interfaz de usuario amigable con funcionalidades robustas
para el manejo de archivos demuestra el compromiso con la usabilidad y eficacia del
programa.
No obstante, se reconocen áreas de mejora, como la consideración de estándares de
seguridad más actuales y la implementación de prácticas de manejo de claves más
avanzadas. La seguridad de la información es una preocupación constante, y futuras
iteraciones del proyecto podrían centrarse en la integración de algoritmos más modernos
y seguros.
En resumen, este proyecto representa un paso significativo hacia la comprensión y
aplicación de algoritmos de encriptación clásicos, y sienta las bases para futuras mejoras
y expansiones. La implementación exitosa del DES en este programa destaca el potencial
para desarrollar soluciones prácticas y seguras para la protección de datos en entornos
diversos.

También podría gustarte