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

NodeJS Bcrypt比对Invision Community存储的哈希密码始终返回false

bcrypt比对Invision Community生成的密码哈希始终返回false的原因及解决方案

  • 哈希前缀不兼容(最高概率)
    Invision Community为PHP开发的程序,PHP的bcrypt实现生成的哈希默认使用$2y$前缀,而Node.js生态主流bcrypt包默认仅识别$2a$、$2b$前缀的哈希,遇到$2y$前缀时会直接判定校验失败。
    修复方法为比对前替换哈希前缀:
    const originalHash = "$2y$10$IPu20eKbJ1I7WcsWnuSq1u9NlcYhVRgdUWSHoENNH2fguhca8K2py"
    // 替换前缀为bcrypt包兼容的格式
    const compatibleHash = originalHash.replace(/^\$2y\$/, '$2a$')
    const isValid = await bcrypt.compare("Test123123", compatibleHash)
    
  • 明文密码存在多余字符
    接收POST请求的密码参数时,可能存在未处理的前后空白、换行符,或者参数解析时意外拼接了多余字符,比对前可先对明文密码执行trim()处理。
  • 数据库哈希值异常
    检查Prisma Schema中用户密码字段的长度配置:bcrypt生成的哈希固定长度为60位,若字段长度小于60会导致存储时哈希被截断,校验必然失败。同时确认查询逻辑取到的确实是目标用户的哈希,不存在查询错位、转义字符破坏哈希结构的问题。
  • bcrypt包版本兼容问题
    过低版本的Node.js bcrypt包存在算法实现差异,可升级到最新稳定版,或切换到纯JS实现、兼容性更好的bcryptjs包进行校验。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 18:15:05