Become a sponsor

概述
密码存储采用 外部 salt + bcrypt(password+salt):salt 独立存放、bcrypt 负责哈希。utility/crypto 提供生成、比对与格式识别的完整 API。
| 函数 | 说明 |
|---|---|
| GenerateSalt() | 生成随机盐 |
| HashPassword(password, salt) | bcrypt(password+salt) 哈希 |
| VerifyPassword(hashed, password, salt) | 恒时比对 |
| IsBcrypt(hashed) | 识别是否 bcrypt 格式(兼容迁移) |
读取用户记录的 salt:
salt 非空 → VerifyPassword(库中哈希, 输入密码, salt)
salt 为空 → 直接比对密码(兼容无盐存量数据)salt 为空时的直接比对是兼容路径——新数据一律走加盐哈希。
| 要点 | 说明 |
|---|---|
| salt 独立存储 | 不同用户同密码哈希不同;防彩虹表 |
| bcrypt 成本因子 | 计算密集,暴力枚举代价高 |
| 恒时比对 | VerifyPassword 内部恒时比较,防时序侧信道 |
| 数据库不存明文 | 任何接口/日志/导出都不出现明文 |
个人中心经 PUT /api/index/updatePassword 修改:校验旧密码 → 新密码哈希落库。管理员重置密码属于手写 service 方法(非标准五方法),走对应权限节点。
| 场景 | 处理 |
|---|---|
| Token 签名 | jwt.secret HMAC(非密码哈希体系) |
| 传输 | 生产 HTTPS(Nginx 终止 TLS) |
| 敏感展示 | 前端脱敏(手机号等) |