bcryptjs是什么、加密和对比过程是怎样的(初级版)
2026/6/21 16:51:49 网站建设 项目流程

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次),强行反推需要耗费很高的成本。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询