3

我想加密用户输入密码以在某些视图中与原始密码进行比较。我尝试导入和应用encrypt方法:

import passlib.hash.django_pbkdf2_sha256

但它没有那个模块?

4

2 回答 2

3

您可能正在寻找set_password

from models import User
new_user = User.objects.create(username='new_user', email='example@example.com')
new_user.set_password('newpassword')

或者,您可以使用make_password

from django.contrib.auth.hashers import make_password
from models import User
first_pass = User.objects.all()[0].password.split('$')
hasher = first_pass[0]
salt = first_pass[1]  # grabbing salt from the first password of the database
make_password('newpassword', salt, hasher)
于 2017-06-07T19:19:11.343 回答
2

您应该只使用以下authenticate方法django.contrib.auth

test_user = authenticate(username=..., password=...)

如果凭据有效,将返回一个新用户,但这不会更改当前登录的用户。如果某些用户使用不同的加密方案,或者您使用自定义身份验证后端,这仍然有效。

如果由于某种原因你仍然需要重现 Django 的加密,你可以使用django.utils.crypto.pbkdf2,但同样,你可能会更好地使用更高级别的check_password函数django.contrib.auth.hashers

check_password(new_password, encoded_password)
于 2013-04-23T11:36:48.583 回答