Python Django覆盖密码加密

Python Django覆盖密码加密,python,django,encryption,passwords,Python,Django,Encryption,Passwords,我目前正在使用Django用Python开发一个工具,在这个工具中我必须导入一个现有的用户数据库。显然,这些现有用户的密码与Django使用的默认密码加密不同 我想覆盖密码方法的加密,以保持我的密码不被修改。我在文档中找不到如何重写现有方法,只找到了如何添加有关用户的信息(我也找不到如何删除有关用户的信息,如名字或姓氏,所以如果有人知道,请告诉我) 谢谢您的帮助。在Django中,用户身份验证的方式不是在用户模型本身中完成的。Django使用其他模块来实现这一点。在您的情况下,您可以创建用于检查

我目前正在使用Django用Python开发一个工具,在这个工具中我必须导入一个现有的用户数据库。显然,这些现有用户的密码与Django使用的默认密码加密不同

我想覆盖密码方法的加密,以保持我的密码不被修改。我在文档中找不到如何重写现有方法,只找到了如何添加有关用户的信息(我也找不到如何删除有关用户的信息,如名字或姓氏,所以如果有人知道,请告诉我)


谢谢您的帮助。

在Django中,用户身份验证的方式不是在用户模型本身中完成的。Django使用其他模块来实现这一点。在您的情况下,您可以创建用于检查密码的自定义模块,并将其添加到
设置.py
()

Django的一个很酷的地方是,您可以提供多个这样的哈希器来进行身份验证。假设您当前的哈希方法不如Django使用的某些方法安全。然后,如果将自定义哈希器添加到
密码\u哈希器的底部,则可能会发生以下情况。如果试图登录的用户的密码是使用您的自定义方法存储的,那么Django将尝试第一个哈希程序,它将失败。然后,它将尝试其余的哈希,它们都将失败,除了您的自定义哈希。但是,由于用户已成功通过身份验证,并且成功的哈希程序不是第一个哈希程序,因此Django将使用第一个定义的哈希程序自动重新哈希密码。这样,当用户不断登录时,您可以优雅地升级到更安全的密码哈希算法


另外,如果您正在迁移当前数据库,并且users表与Django用户模型不匹配,请记住,从Django 1.5开始,您可以定义自定义的
用户
模型,而不是Django的。请重新考虑保留旧密码哈希的决定

除非您已经为它们使用了一些非常现代和强大的方案(如pbkdf2、bcrypt.shaXXX_crypt),而不仅仅是一些(盐或非盐)sha1散列

我知道保持兼容和支持旧的垃圾很有诱惑力,但是这些旧的(盐渍的或不盐渍的,对暴力强迫没有多大关系)sha1哈希现在可以以每秒超过1*10^9次的猜测率被打破

此外,出于同样的原因,旧的密码最小长度要求可能需要重新考虑


默认的django密码哈希方案是非常安全的,顺便说一句,您应该真正使用它。

检查django 1.5;对于Django 1.4。您需要提供一个定制的哈希器,并在设置中进行配置。谢谢,它太完美了!:-)