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

 猴三爷22_394 发布于 2023-01-29 06:15

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

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

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

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

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

任何帮助深表感谢.

1 个回答
  • 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'
    

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

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

    2023-01-29 06:43 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有