news 2026/8/7 13:57:48

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/8/7 22:46:58

多场景头盔佩戴检测

多场景头盔佩戴检测系统 本文档旨在全面、深入地介绍安全帽佩戴检测系统的技术细节、架构设计及功能实现。系统集成了深度学习目标检测算法、Web全栈开发技术与数据库管理技术,形成了一套完整的闭环解决方案。1. 系统架构设计 (System Architecture) 本系统采用经典…

作者头像 李华
网站建设 2026/8/7 23:38:07

70看看:AI如何帮你快速生成代码项目

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容: 使用70看看平台,输入以下需求:创建一个简单的待办事项应用,包含添加、删除和标记完成功能。前端使用React,后端使用Node.js&#xff…

作者头像 李华
网站建设 2026/8/7 22:09:02

13、Puppet 模块与类:从基础到高级应用

Puppet 模块与类:从基础到高级应用 1. 模块代码编写 Puppet 模块具有标准的目录结构,这有助于 Puppet 自动查找模块内的清单文件、模板和其他组件。在这个示例中,我们主要关注 manifests 和 files 这两个子目录。以下是创建管理 NTP 服务的模块的详细步骤: 创建 ma…

作者头像 李华
网站建设 2026/8/7 22:09:03

JBoltAI 识图阅卷:AI 赋能教育考评,开启智能阅卷新时代

在教育信息化深入发展的今天,学校、考试院、培训机构面临着大规模阅卷的共性难题:人工阅卷效率低下、主观误差难以避免、人力成本居高不下。传统阅卷模式不仅消耗大量师资精力,还可能因疲劳、标准理解偏差等因素影响考评结果的公正性与准确性…

作者头像 李华
网站建设 2026/8/7 22:08:03

16、模板与容器管理:Puppet 实践全解析

模板与容器管理:Puppet 实践全解析 模板参数传递 在模板中声明参数,需在非打印标签内用竖线(|)列出参数。示例如下( template_params.epp ): <% | String[1] $aws_access_key,String[1] $aws_secret_key, | -%> aws_access_key_id = <%= $aws_access_key…

作者头像 李华
网站建设 2026/8/7 14:06:36

MinGW-w64实战:从下载到编译第一个C++项目

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容&#xff1a; 开发一个分步指导应用&#xff0c;包含&#xff1a;1) MinGW-w64官网下载指引(区分不同CPU架构) 2) 安装过程截图指导 3) 环境变量配置检测工具 4) 示例C项目(计算器程序)源码及编译…

作者头像 李华