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

如何在Django中使用bcrypt哈希密码匹配CakePHP生成的加密结果

Django兼容CakePHP bcrypt密码方案

前置说明

CakePHP的blowfish哈希就是标准bcrypt算法,setCost(7)对应bcrypt的成本因子为7,哈希迭代次数为2^7=128次。bcrypt生成的哈希字符串本身包含成本因子、salt等参数,校验时会自动读取这些参数,不需要额外适配即可完成旧密码校验。


操作步骤

1. 安装依赖

安装bcrypt库支持:
pip install bcrypt

2. 基础配置(仅校验旧密码用)

修改项目settings.py中的PASSWORD_HASHERS配置,将bcrypt哈希器放在列表首位即可:

PASSWORD_HASHERS = [
    "django.contrib.auth.hashers.BCryptPasswordHasher",
    # 保留原来的其他哈希器即可
    "django.contrib.auth.hashers.PBKDF2PasswordHasher",
    "django.contrib.auth.hashers.PBKDF2SHA1PasswordHasher",
    "django.contrib.auth.hashers.Argon2PasswordHasher",
]

完成以上配置后,直接调用Django自带的check_password(用户输入的明文密码, 数据库存储的旧哈希)方法即可完成原有密码的校验。


3. 进阶配置(新生成密码和原CakePHP规则一致)

如果需要新创建的用户、用户修改后的密码也采用成本因子7的bcrypt哈希,和原有CakePHP生成规则完全一致,可以自定义哈希器:

  1. 在你的Django应用下新建hashers.py文件,写入以下内容:
from django.contrib.auth.hashers import BCryptPasswordHasher

class CakeBCryptHasher(BCryptPasswordHasher):
    # 对应CakePHP setCost(7),迭代次数为2的7次方
    rounds = 1 << 7
  1. 修改settings.py中的PASSWORD_HASHERS,将自定义哈希器放在首位:
PASSWORD_HASHERS = [
    "你的应用名.hashers.CakeBCryptHasher",
    # 其他原有哈希器保持不变
    "django.contrib.auth.hashers.BCryptPasswordHasher",
    "django.contrib.auth.hashers.PBKDF2PasswordHasher",
]

校验测试

可以用原有系统的明文密码和对应哈希做测试:

from django.contrib.auth import check_password

# 第一个参数是用户输入的明文密码,第二个参数是数据库里存的CakePHP生成的哈希
print(check_password("你的测试明文密码", "对应CakePHP生成的哈希字符串"))
# 返回True即为校验成功

内容的提问来源于stack exchange,提问作者anonymous

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 11:06:04