Ir al contenido principal

Encriptado de información con "hashlib" en Python

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:

hashlib

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":

algo

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":

guarentedd

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:

encript_text

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:

encript_text_resul
Para visualizar la cadena en formato hexadecimal haremos uso de la función "hexdigest()":

encript_text_hexa

Obteniendo el resultado que vemos a continuación:

hexa

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:

password_hash

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:

passwordd

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.

Saludos.

Comentarios

Entradas más populares de este blog

Descargar vídeos y audios de YouTube con Python y Pafy

Introducción: YouTube es una plataforma que nos permite disfrutar de vídeos informativos, películas, música y mucho, mucho más. Siempre que escuchamos una canción queremos descargarla, si vemos un vídeo también queremos descargarlo, de esta manera podríamos verlos desde donde queramos sin necesidad de una conexión a Internet. Hoy te enseñare a descargar vídeos y audios de el sitio web conocido como YoutTube, esto lo lograremos haciendo uso de una librería llamada Pafy, si aun no tienes la librería Pafy, puedes descargarla ingresando al siguiente enlace:  Librería Pafy . Usando Pafy: Pafy una biblioteca de Python para descargar contenido de YouTube y recuperar metadatos. Antes de descargar contenido, usaremos a Pafy para obtener información de un vídeo especifico. A continuación te mostrare un ejemplo para obtener el titulo de un vídeo. import pafy url_video = " https://www.youtube.com/watch?v=JkK8g6FMEXE " video = pafy.new(url_video) pr

Calculando el factorial de un número (ejemplo de función recursiva).

Hola, mi nombre es Antonio Alfonso Martínez y en el presente artículo me dispongo a explicar un sencillo método para calcular el factorial de un número haciendo uso del concepto de recursividad. Para empezar, diremos que el factorial de un número natural "n" es el resultado del producto de todos los números desde 1 hasta dicho número "n". Así, para efectuar el calculo del factorial de un número, vamos a emplear una sencilla función a la que daremos el nombre de "factorial". De modo, que, partiendo del hecho de que el factorial de 1 y 0 es 1, construiremos nuestra función (a la que daremos el nombre de "factorial") para realizar el calculo del factorial de 5: Lo que hace esta función, es tomar como argumento un número "n". de modo que si este es 0 o 1 ("if n==0 or n==1:") la función devolverá directamente como resultado el número 1 ("resultado=1"). Sin embargo si dicho número "n" es mayor que

Sistema Hexadecimal - Sistema de numeración posicional

Sistema Hexadecimal El sistema hexadecimal es un sistema numérico que tiene como base el numero 16, y es una variante de los numero binarios El sistema hexadecimal es utilizado por nuestros ordenadores con el fin de abreviar valores de datos e instrucciones de memoria. Esta es una imagen que muestra el contenido de un archivo con exención 'dll' en un editor de texto, como el editor de texto no reconoce este tipo de archivo, nos lo muestra de esta manera: Como se puede apreciar, en vez de ver una gran cantidad de 0 y 1, vemos que hay grupos de 4 dígitos, y si observamos, vemos que son grupos de dígitos hexadecimales. El archivo cuentan con más de 48 mil lineas, por ello no se me es posible mostrarlo todo. Este es uno de los usos del sistema hexadecimal para abreviar grandes cantidades de 0 y 1. Ustedes mismos pueden hacer la prueba con una imagen o con cualquier otro tipo de texto. El sistema hexadecima, esta conformado por solo 16 dígitos. A continuación te los