python 密码哈希与盐和获得不同的哈希和不同的盐任何时候

tyu7yeag  于 2023-10-14  发布在  Python
关注(0)|答案(1)|浏览(134)

我使用bcrypt,不能保存哈希和盐检查密码的任何时候,因为我的盐和哈希改变任何时候。我如何修复我的函数,以哈希和检查密码与bcrypt
我的尝试:

import bcrypt

def password_hasher(password):
    pwd = password.encode()
    salt = bcrypt.gensalt()
    hashed = bcrypt.hashpw(pwd, salt)
    return hashed
col17t5w

col17t5w1#

你的函数每次调用password_hasher都会生成一个新的salt,这意味着每次对同一个密码进行哈希运算时,你都会得到一个不同的哈希值。这是bcrypt的预期行为,也是其有助于增加安全性的功能之一。每次使用新的salt对密码进行哈希运算时,即使密码相同,得到的哈希值也会不同。
要根据以前的哈希版本验证密码,您不需要单独存储盐。这是因为bcrypt哈希包含盐作为结果哈希字符串的一部分。因此,您只需要存储哈希。
代码的修改版本:

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

相关问题