news 2026/4/25 23:30:53

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/4/25 9:13:40

浅记线性同余方程(组)

线性同余方程就是形如 ��≡�(mod�)ax≡b(modm) 其中 �,�,�a,b,m 是给定的整数。解法#由同余的性质可知 �∣��−�m∣ax−b 即 �&#x…

作者头像 李华
网站建设 2026/4/25 9:19:26

Oracle11g一键巡检脚本(输出HTML格式)

、Python脚本(完整代码)import subprocessimport osimport socketimport reimport globimport cx_Oracleimport argparsefrom datetime import datetimedef parse_args():"""解析命令行参数,支持灵活配置巡检参数""…

作者头像 李华
网站建设 2026/4/21 17:08:36

20、云资源编排与Puppet基础设施搭建

云资源编排与Puppet基础设施搭建 1. AWS资源配置 在配置AWS资源时,首先要设置路由表。以下是一个 ec2_vpc_routetable 资源的示例: ec2_vpc_routetable { pbg-rt:ensure => present,region => $region,vpc => pbg-vpc,routes => [{destination_cidr_blo…

作者头像 李华
网站建设 2026/4/23 11:43:42

重塑 Java 企业 AI 生态:JBoltAI 引领 AIGS 时代的技术革命

当人工智能从内容生成(AIGC)迈向服务重塑(AIGS),软件行业正迎来前所未有的范式变革。对于深耕 Java 技术栈的企业而言,如何快速接入 AI 能力、完成系统智能化升级,成为破局增长的关键命题。JBol…

作者头像 李华
网站建设 2026/4/18 23:49:44

CycleGAN零基础入门:手把手教你实现第一个项目

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容: 创建一个面向初学者的CycleGAN教学项目,包含逐步指导:从数据准备、模型训练到结果可视化。要求每个步骤都有详细说明和示例代码,并提供交互式练习…

作者头像 李华