En ocasiones, nos encontramos con aplicaciones o webs que requieren la introducción de datos de usuario en la misma para su almacenamiento o trasmisión posterior, datos, los cuales, necesitan la correspondiente protección contra ataques. Para lograr el objetivo de proteger los datos introducidos por el usuario, la mayoría de webs y aplicaciones que manejan dicho tipo de información, emplean funciones "hash", las cuales lo que van a generar/guardar es una cadena de caracteres de longitud fija correspondiente a la contraseña (o información) creada (y no la contraseña o texto en si) de modo que una vez creado el objeto "hash" este queda asociado a dicha contraseña de modo permanente, convirtiéndose en una especie de firma de la correspondiente información introducida que a su vez, podrá ser empleada para detectar para validar la información o detectar posibles alteraciones en los datos asociados.
En el presente articulo veremos el modo de crear con python, dicha cadena de caracteres. Para ello haremos uso del módulo nativo "hashlib", mediante el cual, podremos disponer de los distintos algoritmos que existen creados para generar los "hash" para textos y contraseñas. Así, para empezar a trabajar, lo primero que haremos será importar el referido módulo:
Hecha la importación, empezaremos a crear nuestros "hash", para un texto. Como decíamos más arriba el módulo "hashlib" contiene una seria de algoritmos definidos (SHA256, MD5, blake2b....) los cuales, se encargarán de generar la correspondiente cadena que se asociará a la información protegida, cada uno de ellos realizará su función de un modo distinto, pudiendo nosotros, escoger cual queremos que emplee nuestro módulo.
No obstante, debemos tener en cuenta que no todos los algoritmos están disponibles para todos los equipos ya que en función de las características de nuestra computadora y de su sistema operativo, estarán disponibles, para ser usados, unos algoritmos si y otros no. Para conocer el listado de algoritmos disponibles para nuestro sistema, introduciremos "hashlib.algorithms_available":
De todos modos, existe un grupo de algoritmos disponibles para todos los dispositivos. Para poder acceder al listado de tales algoritmos "comunes" introduciremos "hashlib.algorithms_guaranteed":
Una vez que tenemos importado el módulo "hashlib" y conocemos cuales algoritmos son los que podemos usar., expondremos el método para crear los "hash" para un texto:
Como se puede apreciar en la imagen, lo primero que hacemos es crear una variable "h" que será igual a la función "hashlib.new()" que tomará como argumento el string correspondiente al nombre del algoritmo que queremos utilizar ('sha256' en nuestro ejemplo) para generar el cifrado para el texto que definiremos más adelante. Acto seguido, con la función "update()" asociaremos la cadena (hash) generada con la función "hashlib.new()" con el texto que especificaremos entre los paréntesis.
Finalmente, vamos a visualizar la cadena generada con el algoritmo 'sha256', mediante "h.digest()" obteniendo el siguiente resultado:
Para visualizar la cadena en formato hexadecimal haremos uso de la función "hexdigest()":
Obteniendo el resultado que vemos a continuación:
Con esto ya tendríamos creada la cadena que va a quedar asociada (a modo de firma) con el texto que hemos introducido, de modo que si volviéramos a ejecutar el código introduciendo el mismo texto, volveríamos a obtener la misma cadena de caracteres. Esta es la secuencia que finalmente se almacenará en la aplicación en la que se haya introducido el texto, lo cual dificultará el acceso a la información introducida ya que de accederse a ella, se obtendría dicha cadena en lugar del texto original al que se encuentra asociada.
Por su parte, para la creación de un "hash" destinado a una contraseña introducida por el usuario en la aplicación o web, usaremos la función "" la cual, tomará como argumentos el nombre del algoritmo escogido para generar la cadena, la cadena correspondiente a la contraseña introducida, el "salt" consistente en una serie de valores generados de modo aleatorio con "urandom()" y el número de iteraciones que se va a emplear para la creación de la cadena:
Finalmente, de modo similar a lo que hacíamos en el caso anterior, visualizaremos la cadena en formato hexadecimal, en este caso, con la función "binascii.hexlify()", obteniendo el siguiente resultado:
Así, habríamos obtenido la secuencia alfanumérica que quedaría asociada de modo definitivo con la contraseña ("password" en nuestro ejemplo) introducida en nuestra hipotética aplicación, siendo dicha cadena alfanumérica (al igual que lo que sucedía con el texto) la que se almacene en la aplicación y la que se utilice para detectar eventuales cambios o alteraciones en la contraseña o texto.
Comentarios
Publicar un comentario