如何加密到Django默认的pbkdf2_sha256加密?

时间:2013-04-23 10:01:47

标签: django passwords

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

import passlib.hash.django_pbkdf2_sha256

但它没有那个模块?

2 个答案:

答案 0 :(得分:2)

您可能正在寻找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)

答案 1 :(得分:1)

您应该使用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)