Dav*_*son 10 passwords django cryptography drupal sha
我正在将一个站点从Drupal 7迁移到Django 1.4,包括当前用户.如何使用Drupal散列的密码?
根据此,Drupal 7的使用SHA-512(它们被存储在开头"$ S $"的字符串的形式)散列的口令.
Django 1.4现在包含许多用于存储密码的选项,默认值为SHA-256,但我找不到SHA-512的选项.虽然这个应用程序似乎允许使用SHA2算法,但我不确定它是否与Django 1.4兼容(因为1.4具有灵活的密码哈希).
最简单的方法是什么?
ETA:我已经构建了一个模拟Drupal算法并使迁移变得简单的密码哈希.由于我已经接受了答案,我不会接受,但对于任何想要将Drupal转移到Django迁移的人来说,代码存储在Django片段和GitHub的要点上.
我不太了解Drupal,但我认为密码存储了哈希.如果是这种情况,你将不得不复制密码(我的意思是,将它们保持不变),你将不得不改变Django散列密码的方式,使用与Drupal完全相同的方式,使用相同的安全盐.
我真的不知道该怎么做,但密码的逻辑包含在User对象中.例如.的User.set_password()
功能(描述在这里)使用make_password功能.
我想通过一些研究你会发现改变它的方法,但重要的是,记住功能必须是平等的!即:
对于允许的密码集中的每个x,drupal_hash(x)== django_hash(x).
编辑:
深入了解django使用get_hasher函数获取has函数.现在在1.4版本中,有一种方法可以指定Django如何选择该功能.看看这个:https://docs.djangoproject.com/en/dev/topics/auth/#how-django-stores-passwords
最后,为了创建自己的函数,您可以看看它是如何在MD5PasswordHasher上完成的.看起来很简单.您可以使用hashlib python库生成sha-512算法.
更改编码方法需要类似于:
def encode(self, password, salt):
assert password
assert salt and '$' not in salt
hash = hashlib.sha512(salt + password).hexdigest()
return "%s$%s$%s" % (self.algorithm, salt, hash)
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
1642 次 |
最近记录: |