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!
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.
Pista: Es posible que te resulte de interés utilizar un String multilínea para definir el texto de tu cabecera.
def cabecera():
a = """
██╗ ██╗ █████╗ ███████╗██╗ ██╗ ██████╗ █████╗ ██╗ ██████╗
██║ ██║██╔══██╗██╔════╝██║ ██║██╔════╝██╔══██╗██║ ██╔════╝
███████║███████║███████╗███████║██║ ███████║██║ ██║
██╔══██║██╔══██║╚════██║██╔══██║██║ ██╔══██║██║ ██║
██║ ██║██║ ██║███████║██║ ██║╚██████╗██║ ██║███████╗╚██████╗
╚═╝ ╚═╝╚═╝ ╚═╝╚══════╝╚═╝ ╚═╝ ╚═════╝╚═╝ ╚═╝╚══════╝ ╚═════╝
<Felipe Herrera>
"""
print(a)
cabecera()
██╗ ██╗ █████╗ ███████╗██╗ ██╗ ██████╗ █████╗ ██╗ ██████╗ ██║ ██║██╔══██╗██╔════╝██║ ██║██╔════╝██╔══██╗██║ ██╔════╝ ███████║███████║███████╗███████║██║ ███████║██║ ██║ ██╔══██║██╔══██║╚════██║██╔══██║██║ ██╔══██║██║ ██║ ██║ ██║██║ ██║███████║██║ ██║╚██████╗██║ ██║███████╗╚██████╗ ╚═╝ ╚═╝╚═╝ ╚═╝╚══════╝╚═╝ ╚═╝ ╚═════╝╚═╝ ╚═╝╚══════╝ ╚═════╝ <Felipe Herrera>
¡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.
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.
mensaje = "Esto es un mensaje importante"
hash(mensaje)
3852857395115085488
¡Estupendo! Ya tienes gran parte de tu aplicación implementada. Lo siguiente que debes implementar es un mecanismo para poder mensajes de los usuarios.
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.
texto = input("Introduce un mensaje: ")
Introduce un mensaje:
print(texto)
¡Enhorabuena! Ya tienes listos todos los componentes que necesitas para construir la aplicación final utilizando Python 3.
# 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