我怎样才能在 Django ORM 中获取密码哈希值?

how could I get the password hash in Django ORM?

我想通过密码获取用户,所以当我输入以下代码时

User.objects.get(password='test') 

我收到一个错误,我已经知道这是什么错误,因为密码已经过哈希处理,但我想得到它,所以我需要什么技巧?

I get an error and I already know what is error is talking about which occurs because the password has been hashed but I want to get it, so what is the trick I need here?

不会。散列算法使用与散列密码一起存储的 random 值(名为 salt [wiki])。因此,这意味着对于给定的密码,没有 单个 哈希,而是无限个。对于固定的盐大小,严格来说,哈希结果的数量是有限的,但哈希的数量仍然很大,generate/test 全部是不可行的。

Salt 用于防止一组 pre-comuted 哈希值(也称为 rainbow table [wiki])。通过使用 salt,几乎不可能为给定的一组密码计算每种可能的 salt 的散列值,因此这使得将散列值反转为密码的问题变得更加困难。

因此您应该遍历 User 对象,并使用 .check_password(…) method [Django-doc]:

for user in User.objects.all():
    if user.check_password('test'):
        # … we found a user with password 'test'
        pass

有关详细信息,请参阅 How Django stores passwords section of the documentation