一、参数与存储格式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 条评论

暂无评论
立即
投稿

微信公众账号

微信扫一扫加关注

发表
评论
返回
顶部