我已经从Discourse导出了数据库。 它确实含有password_hash和盐。
我已经做了我的研究,发现 Django 默认使用PBKDF2
,甚至 Discours 也使用哈希算法 sha256 和迭代次数 64000。
我想迁移这些密码,以便 Django 能够使用相同的密码对用户进行身份验证。
有很多方法可以做到这一点。
在后端编写您自己的身份验证方法 - 当用户尝试登录时,该方法接受与 Discourse 相同的哈希方法。这样,散列密码应与用户的盐和他们输入的密码匹配。
这可以按如下方式完成:
from django.contrib.auth.hashers import PBKDF2PasswordHasher
class MyPBKDF2PasswordHasher(PBKDF2PasswordHasher):
"""
A subclass of PBKDF2PasswordHasher that uses 64000 times more iterations.
"""
iterations = PBKDF2PasswordHasher.iterations * n
iterations = 64000 #Use this for simplicity!!
在hashers.py
.请注意 -PBKDF2PasswordHasher.iterations * n
必须等于 64000 - 我认为迭代次数目前设置为150000
,因此直接iterations = 64000
可能更容易。迭代是你想要改变的全部内容,所有其他行为都将继承自PBKDF2PasswordHasher
类。
然后,您所需要的只是:
PASSWORD_HASHERS = [
'application_name.hashers.MyPBKDF2PasswordHasher',
]
在settings.py
中,application_name
在哪里,是的,您猜对了,可以找到hashers.py
的应用程序的名称。
然而。。。以下有关密码存储和哈希处理的文档在您的搜索中可能非常有用:
https://docs.djangoproject.com/en/2.1/topics/auth/passwords/#auth-password-storage