一、参数与存储格式type HashMeta = { algo: 'pbkdf2'; hash: string; salt: string; iterations: number; pepperId?: string } 二、哈希生成与验证import crypto from 'crypto' function genSalt(len = 16): Buffer { return crypto.randomBytes(len) } function pbkdf2Hash(password: string, salt: Buffer, iterations: number, pepper?: Buffer): Buffer { const data = pepper ? Buffer.concat([Buffer.from(password, 'utf8'), pepper]) : Buffer.from(password, 'utf8') return crypto.pbkdf2Sync(data, salt, iterations, 32, 'sha256') } function createHash(password: string, iterations: number, pepperId?: string, pepper?: Buffer): HashMeta { const salt = genSalt() const h = pbkdf2Hash(password, salt, iterations, pepper) return { algo: 'pbkdf2', hash: h.toString('base64'), salt: salt.toString('base64'), iterations, pepperId } } function verifyHash(password: string, meta: HashMeta, pepper?: Buffer): boolean { const salt = Buffer.from(meta.salt, 'base64') const h = pbkdf2Hash(password, salt, meta.iterations, pepper) return h.toString('base64') === meta.hash } 三、参数校验与旋转function paramsStrong(meta: HashMeta): boolean { return meta.iterations >= 120000 } function rotateIfWeak(password: string, meta: HashMeta, preferredIterations: number, pepperId?: string, pepper?: Buffer): HashMeta { if (paramsStrong(meta)) return meta return createHash(password, preferredIterations, pepperId, pepper) } 四、存储与验收type UserRecord = { id: string; password: HashMeta } function storeUser(id: string, meta: HashMeta): UserRecord { return { id, password: meta } } 盐长度≥16字节;迭代次数≥120000;哈希长度32字节(SHA256)。支持pepper标识与验证;弱参数登录后旋转到首选迭代。存储包含`algo/salt/hash/iterations/pepperId`;验证一致并记录审计。

点赞(0) 打赏

评论列表 共有 0 条评论

暂无评论
立即
投稿

微信公众账号

微信扫一扫加关注

发表
评论
返回
顶部
1.916899s