← 中文资源

简体中文版本

带盐轮数的 bcrypt 密码哈希

用 bcrypt 可配置盐轮数哈希和验证密码,实现自适应成本哈希。

阅读英文原文

示例说明

用 bcrypt 可配置盐轮数哈希和验证密码,实现自适应成本哈希。本示例属于认证与令牌场景,提供可直接复制使用的typescript代码片段,附带边界条件与使用注意事项。

技术要点

  • saltRounds 控制计算成本适应硬件升级
  • needsRehash 检查轮数是否过时
  • pepper 加密钥增强防数据库泄露

代码解读

上述代码实现了带盐轮数的 bcrypt 密码哈希的核心逻辑。用 bcrypt 可配置盐轮数哈希和验证密码,实现自适应成本哈希。代码中包含输入校验、核心算法和结果返回三个部分。关键在于正确处理边界情况,例如空输入、非法参数和并发场景。saltRounds 控制计算成本适应硬件升级,needsRehash 检查轮数是否过时。这些设计确保代码在生产环境中的健壮性。

使用建议

在实际项目中使用本示例时,建议先理解带盐轮数的 bcrypt 密码哈希的适用场景与限制条件。pepper 加密钥增强防数据库泄露。根据具体业务需求调整参数配置,并编写单元测试覆盖正常路径与边界情况。本代码片段可直接集成到现有项目中,或作为参考实现自行扩展。

代码示例

import bcrypt from'bcrypt';export async function hashPassword(password:string,saltRounds=12):Promise<string>{return bcrypt.hash(password,saltRounds);}export async function verifyPassword(hash:string,password:string):Promise<boolean>{try{return await bcrypt.compare(password,hash);}catch{return false;}}export function needsRehash(hash:string,targetRounds=12):boolean{const rounds=hash.split('$')[2];return Number(rounds)!==targetRounds;}export async function hashWithPepper(password:string,pepper:string,saltRounds=12):Promise<string>{return hashPassword(password+pepper,saltRounds);}