我已经从Discourse导出了数据库。它确实包含password_hash和salt。
我完成了研究,发现Django默认使用PBKDF2
甚至使用Discours use that with hashing algorithm sha256 and number of iterations 64000。
我想迁移这些密码,以便Django能够使用相同的密码对用户进行身份验证。
答案 0 :(得分:1)
有很多方法可以做到这一点。
在后端中编写自己的身份验证方法-当用户尝试登录时,该方法接受与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