gpt4 book ai didi

python - Django:make_password 输出与 django.auth 不同的密码

转载 作者:太空宇宙 更新时间:2023-11-04 04:54:55 33 4
gpt4 key购买 nike

<分区>

我正在尝试实现用户密码历史记录,以便用户在更新密码时不能使用相同的密码两次。为此,我正在使用 Django 身份验证模块。

为了实现这一点,我只是将用户创建的新密码保存在一个额外的 sql 表 my_userpasswordhistory 中。

之后,我创建了一个新的 PasswordValidator 来对照旧密码检查新密码。我打算这样做的方法是从数据库中的用户那里获取所有旧密码,分离出 salt 并运行 make_password(newpassword, salt)

请看下面的代码:

    pass_list = UserPasswordHistory.objects.all().filter(user=user)

for old_pass in pass_list:
#split password so we get the hash and the salt
split_pass = old_pass.password.split('$')
salt = split_pass[2]
pw = split_pass[-1]
if make_password(password, salt) == old_pass.password:
raise ValidationError(
_('Your new Password needs to be different from your old one!'),
code='password_identic'
)

问题

我遇到的问题是,不知何故,Django 在管理后端(通过界面)生成的密码与我使用 make_password() 创建的密码不同。

我的密码在数据库中的值为:

从 my_userpasswordhistory 中选择密码;pbkdf2_sha256$36000$trlHVdErn23Z$BAxX9p3o54QGovIWluP3dM7q73HQNZy9VuYOA6rv268=

但是,在相同的原始密码上使用盐 trlHVdErn23Z,我得到:

pbkdf2_sha256$36000$trlHVdErn23Z$6WbA/0fUvDi82GjN7lqjdMoaDiaoojGY3A913CGuFBY=

此外,多次运行 make_password() 将始终输出相同的(第二个)密码哈希值。

我无法确定 Django 在管理面板中创建密码时是否使用了一些额外的随机化器,如果我发现了错误,或者更可能是我遗漏了什么。

非常感谢。

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com