You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Django中make_password输出格式不符合预期的原因是什么?

Django make_password 输出格式异常原因及解决办法

你手动传入自定义salt时,Django会切换到旧式的哈希算法(如MD5),这种算法的输出就是纯哈希字符串,而非你预期的algorithm$iterations$salt$hash结构化格式。

原因说明

Django的make_password函数设计逻辑是:

  • 当不指定salt时,自动使用默认的强哈希算法(比如PBKDF2),生成包含算法、迭代次数、salt和哈希值的标准结构化字符串;
  • 但如果手动传入salt,函数会降级为兼容性更强但安全性更低的旧式算法,这类算法不会保留元信息,直接输出哈希结果。

解决办法

方案一:推荐,不手动指定salt,让系统自动生成

直接调用make_password时只传密码参数,系统会自动处理salt生成和强哈希计算,输出标准格式的结果:

salted_pwd = make_password(password=password)
print("salted", salted_pwd)

输出示例:pbkdf2_sha256$320000$abcdef123456$xyz789...,包含完整的算法、迭代次数、salt和哈希值,安全性更高。

方案二:特殊需求下自定义salt(不推荐)

如果必须用自定义salt,需要手动指定强哈希算法的实现类,手动调用编码方法:

from django.contrib.auth.hashers import PBKDF2PasswordHasher

salt = get_random_string(length=32)
hasher = PBKDF2PasswordHasher()
salted_pwd = hasher.encode(password, salt)
print("salted", salted_pwd)

这种方式可以生成标准格式的哈希串,但注意强哈希算法对salt长度有规范要求,需确保自定义salt符合对应算法的要求。

注意

手动指定salt会降低密码存储的安全性,Django默认的自动生成逻辑已经经过安全优化,优先推荐方案一。

内容的提问来源于stack exchange,提问作者U. Watt

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.29 05:23:11