【问题标题】:How do I implement Django's password hashing while bypassing auth?如何在绕过身份验证时实现 Django 的密码散列?
【发布时间】:2012-09-09 01:01:02
【问题描述】:

我们正在创建一个用户登录和注册系统,并决定绕过 Django 的身份验证(出于一些原因,这超出了本问题的范围)。

我们仍然需要对我们的密码进行加密,并且仍然希望使用 auth 实现的加密(我相信是 pbkdf2_sha256)。我们可以自己推出,但如果可以的话,我们宁愿使用 Django(同样,不使用 auth 包)。

查看我们的 Django 安装(我们有 1.4.1,最新版本),我们找到了 auth 文件夹(和一个名为 hashers.py 的文件),但是,对于 python 来说,不知道从哪里开始用于加密我们的密码。

谢谢!

编辑:

根据收到的 cmets 和答案,我决定使用内置的方法和表格。

【问题讨论】:

  • 如果您不熟悉一种语言/平台,那么绕开常用的做事方式是一个非常糟糕的主意...
  • 这就是为什么我们不自己滚动
  • ...但您仍然绕过正常的身份验证包。你说这超出了这个问题的范围,但我怀疑不是。如果我们不知道您为什么不采用最简单的方法,我们如何知道潜在的答案是否会与该原因背道而驰?
  • 但是如果我使用 Django 加密密码时使用的相同功能,那么差异是什么?我不想争论,只是想了解。我不想更改任何代码,只是想避免在 mysql 中为我们永远不会使用的管理面板创建额外的表
  • 不同之处在于,您是在为自己创作作品,但收益甚微。创建这些额外的表需要多少成本?您认为集成现有的身份验证库需要多长时间?

标签: python django


【解决方案1】:

如果您查看the source of django's set_password,您会发现它调用了make_password 函数,这可能就是您要查找的函数。

然后您可以使用django's check_password 来验证密码。

这确实增加了对django.contrib.auth 的依赖,因为这些函数是在django.contrib.auth.hashers 中定义的,但这是 Django 中的标准,所以我认为这不是问题。 此外,django.contrib.auth.hashers 不依赖于来自django.contrib.auth 的任何内容。

但是,我只能支持在 cmets 中给您的建议,即您可能应该使用默认的 django auth 包 - 特别是考虑到我们在这里讨论的是安全关键部分。

顺便说一句,用于散列密码的算法实际上是由the PASSWORD_HASHERS 设置控制的。

【讨论】:

  • 我们正在使用 auth 包,只是试图绕过创建一堆 mysql 表。我们保持 django 文件不变,并使用 django 在加密密码时使用的功能
  • 您实际上并没有使用 auth 包,您在其中使用了两个函数。老实说,我并没有强烈的理由使用自定义身份验证而不是 Django 的股票身份验证包。特别是如果您这样做的唯一原因是避免创建几个表(syncdb 会创建)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-08-26
  • 2021-09-05
  • 1970-01-01
  • 2014-08-07
  • 1970-01-01
  • 2011-09-12
  • 2017-10-08
相关资源
最近更新 更多