22 / 05 / 2020

22 / 05 / 2020

            Se trabajó en la codificación del cifrado y el descifrado de las funciones por medio de la sustitución Vigenére, código telefónico y César. Primero se decidió crear una función auxiliar que retornara falso si el carácter evaluado no era una letra o, la posición de la letra en el alfabeto en caso de que si lo fuese. Esta se realizó porque se observó que era necesario conocer la posición de la letra en varios de los retos a realizarse. De manera que, la función recorre todo el alfabeto en busca de alguna coincidencia y en caso de encontrarla retorna el índice de Python en el que se encontró más uno y así conocer la posición de la letra si el alfabeto comienza en a = 1.

 

            Para el cifrado de Vigenére se efectuó la programación de manera tal que, al enviar un mensaje para su proceso de cifrado, se encuentre cada palabra por separado y obtener la posición de todas las letras dentro de ella. Fue clave el darse cuenta de que el conteo de la clave indicada por el usuario era intercalado y se reiniciaba cada vez que se cifraba una palabra. Para ello se codificó una variable que se reinicia a cero antes de ejecutar la evaluación de la posición de las letras en cada palabra previamente encontrada. Otro punto clave fue el darse cuenta de que, si la suma de la clave más la posición de la letra actual se pasaba de 26, el número de letras en el alfabeto debía restársele 27. Esto con el fin de devolvernos a la posición 1 del alfabeto e inmediatamente restarle un uno para obtener el índice en Python. De esta manera se verifica que todas las letras sean incluidas sin importar el numero de la clave.

 

            Para el descifrado por medio de la sustitución Vigenére se observó que se podía reutilizar el código anterior, pero con unos leves cambios. Se modificó el restarle los 27 digititos por una suma de 25 en caso de que la posición de la letra fuese menor a 1 y en lugar de realizar una suma a partir de la letra actual, más el numero de clave, se modificó por una resta. Importante añadir el uso de la función find() para poder realizar cortes y obtener cada palabra del mensaje por separado. Esto se realiza de manera tal que nuestro mensaje a cifrar se le añaden espacios en blanco al inicio y al final y por medio de la función find() encontramos cada espacio alrededor de las palabras y se realiza un “sándwich”.

 

            En la codificación del cifrado por código telefónico se utilizó un mecanismo sencillo para asignar el código de cada letra en el mensaje por medio del uso de la función que nos retorna el valor de la posición de la letra. Se fijó una cadena de caracteres con todos los posibles valores que cada letra podía tomar al ser cifrada. De esta manera, si existe un espacio en el mensaje sin cifrar solamente se añade un asterisco y en caso de encontrarse una letra, se obtiene su posición y se reemplaza por un recorte de el valor que toma de la cadena de los posibles valores cifrados.

 

            Posteriormente, se realizó la codificación del descifrado por medio de una nueva función auxiliar que retornar el índice de Python de la letra en el abecedario por medio de una función matemática. Esta fue clave para evitar el uso excesivo de if. Al tener esta función se tuvo que codificar otra que obtuviera cada par de números en el mensaje cifrado. Se utilizo el mismo método anterior de recorte entre espacios para realizar un “sándwich” a los números y seguidamente obtener su índice Python del abecedario. Al tener el índice se realiza un recorte en la variable “abecedario” definida al inicio, conteniendo todas las letras válidas, y se obtiene la letra que corresponde. Es importante añadir que se tuvo que realizar una buena diferenciación del índice Python y la posición de la letra en el abecedario pues según el índice se tiene a = 0, b = 1, hasta z = 25; mientras que en nuestras posiciones de las letras se tiene a = 1, b = 2, hasta z = 26. Basta mencionar que se realizaron “pruebas de estrés” a cada una de las funciones para verificar que su ejecución fuese la esperada.

 

            Por último, se codificó el cifrado y descifrado de César mediante el uso de la función que retornaba el índice de cada letra y al mismo se le sumaba 3. El número correspondiente era en donde se realizaba el recorte en el alfabeto. Para los casos en el que el número era mayor a los valores posibles, se hizo el mismo tipo de cálculo que para Vigenére en donde la suma se reiniciaba a cero.

Comentarios