我使用bcrypt,不能保存哈希和盐检查密码的任何时候,因为我的盐和哈希改变任何时候。我如何修复我的函数,以哈希和检查密码与bcrypt?我的尝试:
bcrypt
import bcrypt def password_hasher(password): pwd = password.encode() salt = bcrypt.gensalt() hashed = bcrypt.hashpw(pwd, salt) return hashed
col17t5w1#
你的函数每次调用password_hasher都会生成一个新的salt,这意味着每次对同一个密码进行哈希运算时,你都会得到一个不同的哈希值。这是bcrypt的预期行为,也是其有助于增加安全性的功能之一。每次使用新的salt对密码进行哈希运算时,即使密码相同,得到的哈希值也会不同。要根据以前的哈希版本验证密码,您不需要单独存储盐。这是因为bcrypt哈希包含盐作为结果哈希字符串的一部分。因此,您只需要存储哈希。代码的修改版本:
password_hasher
import bcrypt def password_hasher(password: str) -> bytes: pwd = password.encode() salt = bcrypt.gensalt() hashed = bcrypt.hashpw(pwd, salt) return hashed def check_password(password: str, hashed_password: bytes) -> bool: pwd = password.encode() return bcrypt.checkpw(pwd, hashed_password)
使用方法:
# Hash a new password hashed_pw = password_hasher("my_password") # Check the password against the hashed version is_valid = check_password("my_password", hashed_pw) print(is_valid) # This should print True if the password matches
1条答案
按热度按时间col17t5w1#
你的函数每次调用
password_hasher
都会生成一个新的salt,这意味着每次对同一个密码进行哈希运算时,你都会得到一个不同的哈希值。这是bcrypt的预期行为,也是其有助于增加安全性的功能之一。每次使用新的salt对密码进行哈希运算时,即使密码相同,得到的哈希值也会不同。要根据以前的哈希版本验证密码,您不需要单独存储盐。这是因为bcrypt哈希包含盐作为结果哈希字符串的一部分。因此,您只需要存储哈希。
代码的修改版本:
使用方法: