如何在Angular中使用BCrypt/Bcryptjs并验证密码是否已哈希?
BCrypt密码加密调试与校验方案
打印哈希后的密码
你现有代码中注释的加密逻辑是可用的,只需放开注释后新增console.log输出哈希结果即可,修改后的onSubmit方法代码如下:
onSubmit(v: NgForm) { console.log(v.value, v.valid); console.log('原始明文密码:', this.val.password); // 生成盐值+哈希加密 const salt = bcrypt.genSaltSync(10); const hashedPassword = bcrypt.hashSync(this.val.password, salt); // 打印哈希后的密码 console.log('哈希后的密码:', hashedPassword); }
运行代码提交表单后,即可在浏览器控制台看到对应的哈希值。
校验密码哈希状态
你可以通过两种方式校验密码是否完成哈希处理:
- 格式快速校验:标准BCrypt哈希结果固定为60位字符串,且以
$2a$、$2b$、$2y$这类前缀开头,你可以直接判断输出结果的格式是否符合特征,示例判断代码:
const isBcryptHash = /^\$2[ayb]\$.{56}$/.test(hashedPassword); console.log('是否为合法BCrypt哈希:', isBcryptHash);
- 明文比对校验:调用bcrypt自带的比对方法,传入明文密码和哈希结果,判断两者是否匹配,这是最准确的校验方式:
const isMatch = bcrypt.compareSync(this.val.password, hashedPassword); console.log('明文与哈希值是否匹配:', isMatch); // 加密正确的话会返回true
注意事项
如果仅为课程作业要求,前端加密满足需求即可,生产环境下密码加密必须在服务端完成,避免前端加密逻辑被篡改导致安全问题。
内容的提问来源于stack exchange,提问作者SED
相关产品推荐
相关产品推荐

