【问题标题】:How to encrypt to Django default pbkdf2_sha256 encryption?如何加密到 Django 默认 pbkdf2_sha256 加密?
【发布时间】:2013-04-16 11:58:42
【问题描述】:

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

import passlib.hash.django_pbkdf2_sha256

但它没有那个模块?

【问题讨论】:

  • 在更大的范围内,接受的答案是正确的。但至于为什么你的导入失败 - django_pbkdf2_sha256 是一个类,而不是一个模块,所以你必须做from passlib.hash import django_pbdfk2_sha256

标签: django passwords


【解决方案1】:

您应该只使用来自django.contrib.authauthenticate 方法:

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

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

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

check_password(new_password, encoded_password)

【讨论】:

  • 我不想用它来进行身份验证。有一个停用帐户功能。只有当用户输入正确的密码时,该帐户才会被停用。因此,要比较密码,我需要将文本转换为 django 加密,比较它们,如果两个密码相等,则执行任务。
  • 我从 django.contrib.auth.hashers 导入 PBKDF2PasswordHasher。加密的方法是什么?
  • @user2032220 这正是authentication 所做的:它只是检查提供的用户名和密码是否与数据库中的内容匹配,而不是其他任何内容。
  • 显然是这样。我在想不同的事情。谢谢老哥!
【解决方案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)

【讨论】:

    猜你喜欢
    • 2021-01-14
    • 2022-11-19
    • 2021-03-14
    • 1970-01-01
    • 2015-01-30
    • 1970-01-01
    • 1970-01-01
    • 2017-07-06
    • 2011-09-09
    相关资源
    最近更新 更多