Caso Práctico: Programando nuestra primera aplicación¶

Enunciado y contexto del ejercicio¶

Uno de los mecanismos más utilizados para verificar la integridad de la información son las funciones hash. Una función hash recibe como argumento un objeto, en este caso, una cadena de texto de longitud variable, y nos devuelve un número entero de longitud fija que identifica de manera unívoca el contenido de la cadena de texto. En el caso de que cambie cualquier carácter de la cadena de texto, el valor que proporcionará la función hash será completamente distinto.

Cuando nosotros mandamos un mensaje de texto a otra persona, podemos garantizar que el mensaje no ha sido modificado en tránsito si añadimos junto con el mensaje el resultado de una función hash. De esta manera, cuando el mensaje sea recibido por el receptor, puede utilizar la misma función hash para comprobar que el resultado que le proporciona es el mismo que el que nosotros hemos añadido. En caso contrario, el mensaje habrá sido modificado en tránsito.

En este ejercicio práctico se propone la creación de una sencilla aplicación en Python que nos ayude a verificar la integridad de un mensaje calculando la función hash de una cadena de texto que el usuario le proporcione.

¡Completa todos los apartados que se muestran a continuación para conseguir construir la aplicación!

1. Cabecera de la aplicación¶

Cuando creamos una aplicación de consola de comandos, una de las cosas interesantes es añair una cabecera donde se indique el título de la aplicación y el creador.

Crea una función en Python que saque por pantalla el título de tu aplicación y el nombre de su creador. Como consejo personal, cuando yo programo aplicaciones de consola de comandos, me gusta utilizar ASCII Art para la cabecera, ¡te dejo por aquí una referencia! https://patorjk.com/software/taag/#p=testall&f=ANSI%20Shadow&t=Titulo

Pista: Es posible que te resulte de interés utilizar un String multilínea para definir el texto de tu cabecera.

In [2]:
def cabecera():
    a = """
██╗  ██╗ █████╗ ███████╗██╗  ██╗ ██████╗ █████╗ ██╗      ██████╗
██║  ██║██╔══██╗██╔════╝██║  ██║██╔════╝██╔══██╗██║     ██╔════╝
███████║███████║███████╗███████║██║     ███████║██║     ██║     
██╔══██║██╔══██║╚════██║██╔══██║██║     ██╔══██║██║     ██║     
██║  ██║██║  ██║███████║██║  ██║╚██████╗██║  ██║███████╗╚██████╗
╚═╝  ╚═╝╚═╝  ╚═╝╚══════╝╚═╝  ╚═╝ ╚═════╝╚═╝  ╚═╝╚══════╝ ╚═════╝
                                      <Felipe Herrera>                         
"""
    print(a)
In [3]:
cabecera()
██╗  ██╗ █████╗ ███████╗██╗  ██╗ ██████╗ █████╗ ██╗      ██████╗
██║  ██║██╔══██╗██╔════╝██║  ██║██╔════╝██╔══██╗██║     ██╔════╝
███████║███████║███████╗███████║██║     ███████║██║     ██║     
██╔══██║██╔══██║╚════██║██╔══██║██║     ██╔══██║██║     ██║     
██║  ██║██║  ██║███████║██║  ██║╚██████╗██║  ██║███████╗╚██████╗
╚═╝  ╚═╝╚═╝  ╚═╝╚══════╝╚═╝  ╚═╝ ╚═════╝╚═╝  ╚═╝╚══════╝ ╚═════╝
                                      <Felipe Herrera>                         

2. Calculando el hash de una cadena de texto¶

¡Muy bien! Una vez que has decidido un nombre para tu aplicación y has creado una función que saca por pantalla su cabecera, es el momento de implementar su funcionalidad.

Utiliza una función en Python para calcular el hash de una cadena de texto. Revisa las funciones que vienen implementadas por defecto en Python 3, quizás alguna de ellas puede servirte para calcular el hash de una cadena de texto. ¡Te dejo por aquí una referencia a las funciones para que les eches un ojo! https://docs.python.org/3/library/functions.html#built-in-functions
In [4]:
help(hash)
Help on built-in function hash in module builtins:

hash(obj, /)
    Return the hash value for the given object.
    
    Two objects that compare equal must also have the same hash value, but the
    reverse is not necessarily true.

In [5]:
mensaje = "Esto es un mensaje importante"
In [6]:
hash(mensaje)
Out[6]:
3852857395115085488

3. Solicitando al usuario una cadena de texto¶

¡Estupendo! Ya tienes gran parte de tu aplicación implementada. Lo siguiente que debes implementar es un mecanismo para poder mensajes de los usuarios.

Utiliza una función en Python para recibir cadenas de texto de los usuarios de manera interactiva. Revisa las funciones que vienen implementadas por defecto en Python 3, quizás alguna de ellas puede servirte para obtener input de los usuarios. ¡Te dejo por aquí una referencia a las funciones para que les eches un ojo! https://docs.python.org/3/library/functions.html#built-in-functions
In [7]:
help(input)
Help on method raw_input in module ipykernel.kernelbase:

raw_input(prompt='') method of ipykernel.ipkernel.IPythonKernel instance
    Forward raw_input to frontends
    
    Raises
    ------
    StdinNotImplementedError if active frontend doesn't support stdin.

In [8]:
texto = input("Introduce un mensaje: ")
Introduce un mensaje: 
In [9]:
print(texto)

4. Construye la aplicación final¶

¡Enhorabuena! Ya tienes listos todos los componentes que necesitas para construir la aplicación final utilizando Python 3.

Pon en común todo lo que has implementado en las secciones anteriores y construye la aplicación final.
In [10]:
# Saco por pantalla la cabecera de la aplicación
cabecera()
# Solicito al usuario el mensaje
mensaje = input("Introduce un mensaje: ")
# Obtengo el hash del mensaje
hash_value = hash(mensaje)
# Saco por pantalla el hash
print("\nEl hash del mensaje es:", hash_value)
██╗  ██╗ █████╗ ███████╗██╗  ██╗ ██████╗ █████╗ ██╗      ██████╗
██║  ██║██╔══██╗██╔════╝██║  ██║██╔════╝██╔══██╗██║     ██╔════╝
███████║███████║███████╗███████║██║     ███████║██║     ██║     
██╔══██║██╔══██║╚════██║██╔══██║██║     ██╔══██║██║     ██║     
██║  ██║██║  ██║███████║██║  ██║╚██████╗██║  ██║███████╗╚██████╗
╚═╝  ╚═╝╚═╝  ╚═╝╚══════╝╚═╝  ╚═╝ ╚═════╝╚═╝  ╚═╝╚══════╝ ╚═════╝
                                      <Felipe Herrera>                         

Introduce un mensaje: Hola mundo

El hash del mensaje es: -4944886985834097780

5. Ejecuta la aplicación con PyCharm y con una consola de comandos¶

Para terminar con el ejercicio, crea un nuevo proyecto en PyCharm, copia el código que has desarrollado y ejecútalo con PyCharm y una consola de comandos de tu sistema operativo.
In [ ]: