可以将简单的MD5哈希转换为django密码吗?

Ole*_*sov 2 python encryption django cryptography password-encryption

我有一个遗留用户数据库,我想将其集成到一个新的Django项目中.

用户密码使用简单的MD5加密(PHP md5()函数)保存在旧数据库中,无需任何腌制.

覆盖django.contrib.auth的check_password和set_password不是一个选项,因为我已经有新的用户在新的Django项目上处于活动状态.

看着passlib,但不幸的是它不会做什么是需要要在这一具体项目来完成.

基本上,我唯一的选择是以某种方式将哈希转换为Django salted格式,或者实现自定义check_password方法,这将确定密码是普通MD5还是django密码(甚至可能是我的自定义用户模型中的参数,类似legacy=True布尔标志的东西.

任何帮助深表感谢.

Mar*_*ers 7

Django contrib.auth.hashers模块 已经支持普通的,无保留的MD5密码:

# Ancient versions of Django created plain MD5 passwords and accepted
# MD5 passwords with an empty salt.
if ((len(encoded) == 32 and '$' not in encoded) or
        (len(encoded) == 37 and encoded.startswith('md5$$'))):
    algorithm = 'unsalted_md5'
Run Code Online (Sandbox Code Playgroud)

因此,如果您的哈希值是长度为32(哈希值的十六进制表示),并且不包含任何$字符(表示存在哈希签名前缀),或者哈希值为37个字符,并且md5$$从那时开始,则哈希值已经支持.

更好的是:任何成功进行身份验证的用户都会将其密码哈希自动更新为当前首选方案.您的用户将自己迁移您的数据库.