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

如何在Python/Django中验证WordPress密码哈希值?

在Django中验证WordPress数据库密码的Python实现方案

核心问题分析

WordPress当前版本使用PHP的password_hash()生成bcrypt哈希,其前缀为$2y$,但Python的bcrypt库仅兼容$2a$或$2b$前缀的哈希值,这是你之前验证失败的主要原因之一。另外,PHP的bcrypt实现会自动截断超过72字节的密码,Python中需要手动处理这一点。

可行实现步骤

  1. 安装依赖
    确保安装bcrypt库:

    pip install bcrypt
    
  2. 编写验证逻辑
    处理哈希前缀转换,并手动截断过长密码:

    import bcrypt
    
    def verify_wp_password(plain_password, wp_hash):
        # 转换WordPress的$2y$前缀为$2b$,兼容Python bcrypt
        adjusted_hash = wp_hash.replace('$2y$', '$2b$').encode('utf-8')
        # PHP会自动截断超过72字节的密码,Python需手动处理
        trimmed_password = plain_password.encode('utf-8')[:72]
        # 执行验证
        return bcrypt.checkpw(trimmed_password, adjusted_hash)
    
  3. 在Django中使用
    从WordPress数据库获取用户的user_pass字段值,调用上述函数验证:

    # 假设从WP数据库查询到的用户密码哈希存在user['user_pass']中
    is_valid = verify_wp_password(user_input_password, user['user_pass'])
    if is_valid:
        # 执行Django登录逻辑
        pass
    

你之前尝试的问题说明

  • 直接使用bcrypt.verify(password, users[0]['password'])失败:WordPress哈希前缀为$2y$,Python bcrypt不识别该格式,因此提示“不是有效的bcrypt哈希值”。
  • 截断前缀后提示密码长度问题:未手动截断超过72字节的明文密码,而PHP的bcrypt实现会自动处理这一步。
  • 使用phpass验证失败:当前WordPress默认不再使用phpass哈希算法,因此phpass无法识别现有哈希格式。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.01 13:02:29