使用盐对密码进行哈希处理,并随时获得不同的哈希值和不同的盐

问题描述 投票:0回答:1

我使用了

bcrypt
并且无法随时保存哈希和盐来检查密码,因为我的盐和哈希随时改变。 如何修复我的函数以使用
bcrypt
进行散列和检查密码?

我的尝试:

import bcrypt

def password_hasher(password):
    pwd = password.encode()
    salt = bcrypt.gensalt()
    hashed = bcrypt.hashpw(pwd, salt)
    return hashed
python bcrypt
1个回答
0
投票

每次调用

password_hasher
时,您的函数都会生成新的盐,这意味着每次对相同的密码进行哈希处理时,您都会得到不同的哈希值。这是 bcrypt 的预期行为,也是其有助于增强安全性的功能之一。每次使用新的盐对密码进行哈希处理时,即使密码相同,生成的哈希值也会不同。

要根据之前的哈希版本验证密码,您不需要单独存储盐。这是因为 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
最新问题
© www.soinside.com 2019 - 2025. All rights reserved.