Hashing de contraseñas en Python con BCrypt

En este artículo, veremos cómo codificar contraseñas en Python con BCrypt. Almacenar contraseñas en texto sin formato es una mala práctica, ya que es vulnerable a varios intentos de piratería. Es por eso que se recomienda mantenerlos en forma de hash. 

¿Qué es hash?

Es un proceso de convertir una string a otra usando una función hash. Hay varios tipos de funciones hash, pero hay algunas similitudes básicas que todas ellas satisfacen: el hash es un proceso irreversible. es decir, la conversión debe ser de una sola manera, la longitud del hash debe ser fija y una string de entrada debe corresponder únicamente con un hash para que podamos compararlos más tarde, esto lo hace ideal para contraseñas y autenticación.

Hashing Passwords in Python with BCrypt

 

Hash una contraseña en Python usando Bcrypt

Bcrypt es una función de hash de contraseñas diseñada por Nelis Provos y David Mazières. Bcrypt utiliza una criptografía fuerte para codificar y saltear la contraseña basada en el cifrado Blowfish. Para fortalecer el cifrado, podemos aumentar el «factor de costo» para que pueda aumentarse a medida que las computadoras se vuelven más rápidas. También pretende ser lento, para hacer que los ataques de fuerza bruta sean más lentos y más duros.

Para instalar Bcrypt use el comando – 

pip install bcrypt

Las funciones en Bcrypt usadas –

  • bcrypt.gensalt( ) – Se utiliza para generar sal. Salt es una string pseudoaleatoria que se agrega a la contraseña. Dado que el hashing siempre da el mismo resultado para la misma entrada, si alguien tiene acceso a la base de datos, el hash puede ser derrotado. para esa sal se agrega al final de la contraseña antes del hash. No necesita ningún argumento y devuelve una string pseudoaleatoria.
  • bcrypt.hashpw() : se utiliza para crear el hash final que se almacena en una base de datos.
    • Argumentos: podemos pasar Salt y Password en forma de código de bytes.
    • Valor de retorno: si el hashing es exitoso, devuelve una string hash.

Hashing de contraseñas

Para usar bcrypt, deberá importar el módulo bcrypt. Después de eso, la función bcrypt.hashpw() toma 2 argumentos: una string (bytes) y Salt. La sal son datos aleatorios que se utilizan en la función hash. Vamos a codificar una contraseña e imprimirla en los siguientes ejemplos.

Ejemplo 1:

Python3

import bcrypt
  
# example password
password = 'password123'
  
# converting password to array of bytes
bytes = password.encode('utf-8')
  
# generating the salt
salt = bcrypt.gensalt()
  
# Hashing the password
hash = bcrypt.hashpw(bytes, salt)
  
print(hash)

Producción: 

 

Ejemplo 2:

Ahora cambiemos un poco la contraseña de entrada para ver el comportamiento del hashing.

Python3

import bcrypt
  
# example password
password = 'passwordabc'
  
# converting password to array of bytes
bytes = password.encode('utf-8')
  
# generating the salt
salt = bcrypt.gensalt()
  
# Hashing the password
hash = bcrypt.hashpw(bytes, salt)
  
print(hash)

Producción:

 

Comprobación de contraseñas

El siguiente ejemplo compara una contraseña con un valor hash.

Ejemplo 1:

Aquí verificaremos si el usuario ha ingresado la contraseña correcta o no, para eso podemos usar bcrypt.checkpw(contraseña, hash). Al principio, supongamos que el usuario ingresó la contraseña incorrecta.

Python3

import bcrypt
  
# example password
password = 'passwordabc'
  
# converting password to array of bytes
bytes = password.encode('utf-8')
  
# generating the salt
salt = bcrypt.gensalt()
  
# Hashing the password
hash = bcrypt.hashpw(bytes, salt)
  
# Taking user entered password 
userPassword =  'password000'
  
# encoding user password
userBytes = userPassword.encode('utf-8')
  
# checking password
result = bcrypt.checkpw(userBytes, hash)
  
print(result)

Producción:

 

Ejemplo 2:

Ahora veamos qué sucede cuando las contraseñas coinciden:

Python3

import bcrypt
  
# example password
password = 'passwordabc'
  
# converting password to array of bytes
bytes = password.encode('utf-8')
  
# generating the salt
salt = bcrypt.gensalt()
  
# Hashing the password
hash = bcrypt.hashpw(bytes, salt)
  
# Taking user entered password 
userPassword =  'passwordabc'
  
# encoding user password
userBytes = userPassword.encode('utf-8')
  
# checking password
result = bcrypt.checkpw(userBytes, hash)
  
print(result)

Producción:

 

Publicación traducida automáticamente

Artículo escrito por chandramauliguptach y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *