Django - 检查两个密码哈希是否具有相同的原始密码

Django - check if two password hashes are of same raw password

我想跟踪用户密码更改历史,如果他们以前使用过当前密码,则显示警告。请注意,我不想阻止用户设置密码(如果以前使用过),我想让他们设置密码,但之后只是显示警告。所以我要找的不是密码验证器。

我知道虽然 Django 将用户密码保存在数据库中,但它会使用随机盐创建密码的哈希值。因此,相同密码的 2 个哈希值不会相同。不过,是否可以判断是否使用与输入相同的原始密码创建了 2 个不同的密码哈希值?

我不知道,我是否正确理解了你的情况。 这是基于我从您的问题中理解的解决方案。 您可以使用与 Django 中的用户模型关联的 check_password() 方法将新密码与已在使用的密码进行比较。

 @api_view(['POST'])
 def some_function(request):
    new_password = request.data.get('password')
    # get the user from the request
    user_object = request.user
    if user_object.check_password(new_password):
       # check_password() will hash the new_password in the same way how it hashed the password which is already stored in the db and it will compare the new_password with that password.
       print("Both the passwords are same")
    else:
       print("Passwords are not same")

如果请求未通过身份验证,则无法从请求中获取用户。在那种情况下,此代码将不起作用。

希望它能解决您的问题。

如果您无法访问明文密码并且您拥有的只是哈希值,则无法对它们进行任何比较。这正是为了使密码不可逆,尤其是它们的整个数据库。如果有足够的时间和计算能力,您也许可以暴力破解一个密码,但您不能将这些知识应用于任何其他哈希,因此暴力破解整个数据库的成本非常昂贵。

可以在注册、登录或重置密码时,当用户输入他们的明文密码时进行此类比较。那时,您只需要用现有密码的盐对密码进行哈希处理,然后比较哈希值。