news 2026/9/24 17:36:29

bcryptjs是什么、加密和对比过程是怎样的(初级版)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
bcryptjs是什么、加密和对比过程是怎样的(初级版)

bcryptjs是什么?

bcryptjs是bcrypt的JavaScript实现,主要用于密码或其他字符串的加密(在Node.js中,bcrypt只能用来处理字符串,技术上可以用来处理其他诸如文件、对象等,但是花销的性能较大或者容易在加密过程中产生歧义),用于应对密码泄露或者数据库泄露以及密码的反向破解。

bcryptjs是如何进行加密的?

1.接收明文密码

2.生成随机的Salt(bcrypt自动完成)

同一个密码每次生成的Salt不同,这也是加密过程中“加盐”一次的来由。

3.设置cost(工作因子)

用于限定bcrypt的计算次数(2^cost次),cost每增加1,bcrypt的计算量都会翻倍,一般情况下我们会将cost定为10.

4.开始计算

不断用password+Salt扩展密钥,重复2^cost次,形成最终的storedHash(字符串)例如:

$2b$10$Ec3HpayMfx9EA.R4aH/.meKZQgEc8cYruU9JV8w2wWj5z/Lv4NyuW

拆解来看:

$2b$为bcrypt的版本

10 为cost

最后一段为Salt和hash,至于截至那里是Salt,只有bcrypt知道

bcrypt的核对过程是怎样的?

1.获取资源

拿到新的明文密码password和数据库存下的storedHash

2.资源解析

解析hash获取到bcrypt版本、cost、Salt以及hash

3.重新加密

利用新的明文密码password、解析得到的bcrypt版本、cost、Salt重新构造加密参数,然后执行bcrypt算法得到一个新的newStoredHash,将newStoredHash和storedHash做一次恒定时间比较,得出比对结果。这里所谓恒定时间比较参考 恒定时间比较示例代码分析 了解。

注:

bcrypt的加密是不可反推的,攻击者拿到storedHash只能解析到Salt+cost+hash,但是bcrypt加密是单向函数且有很高的计算成本(2^cost次),强行反推需要耗费很高的成本。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/24 12:00:27

Git 协作实战与 Gerrit 评审流程

1. 背景与目标协作开发的痛点集中在:分支基线不一致导致冲突、评审链路混乱、历史不可追溯。本文给出一套可直接落地的 GitGerrit 流程:进入仓库 → 同步远端 → 正确进入分支 → 体检 → 差异审视 → 提交策略 → 评审推送(refs/for/*&#…

作者头像 李华
网站建设 2026/9/24 1:22:24

自研能力之外:JBoltAI 框架为何成为技术团队的明智之选

对于拥有强大自研能力的技术团队而言,“为何不从零搭建,反而选择第三方框架” 是技术决策中的核心考量。在 AI 应用开发领域,顶尖团队凭借扎实的技术功底,确实具备自研底层设施的潜力,但 JBoltAI 框架的价值&#xff0…

作者头像 李华
网站建设 2026/9/24 10:07:26

零基础学会timestampdiff:时间差计算入门指南

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容: 开发一个交互式学习工具,逐步引导用户学习timestampdiff函数:1)基础语法讲解 2)不同时间单位的效果演示 3)常见错误示例及解决方法 4)简单练习题自动批改。要…

作者头像 李华
网站建设 2026/9/23 10:00:20

【开题答辩全过程】以 果然清吧点单与管理系统为例,包含答辩的问题和答案

个人简介 一名14年经验的资深毕设内行人,语言擅长Java、php、微信小程序、Python、Golang、安卓Android等 开发项目包括大数据、深度学习、网站、小程序、安卓、算法。平常会做一些项目定制化开发、代码讲解、答辩教学、文档编写、也懂一些降重方面的技巧。 感谢大家…

作者头像 李华
网站建设 2026/9/24 11:04:43

AI如何帮你理解Java的Collections.singletonList

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容: 创建一个Java示例项目,展示Collections.singletonList的用法。项目应包含以下内容:1. 基本用法示例,展示如何创建不可变单元素列表;2…

作者头像 李华