使用 bcryptjs 对密码做加密
https://www.yuque.com/hello-pg8s3/ui9z3s/ay2dgi
Node - 017 - 使用 bcryptjs 对密码做加密
bcrypt密码图解:
一、前言
用户注册时,如果不对密码做一些加密处理直接明文存储到数据库中,一旦数据库泄露,对用户和公司来说,都是非常严重的问题。
二、使用 js-md5 包来加密
1. md5 简介
MD5信息摘要算法(英语:MD5 Message-Digest Algorithm),一种被广泛使用的密码散列函数,可以产生出一个128位(16字节)的散列值(hash value),用于确保信息传输完整一致。
通常将128位MD5哈希表示为32位十六进制值。
2. 使用 js-md5
- 安装:
$ npm install js-md5
- 引入使用
const md5 = require('js-md5')
md5('123456') // e10adc3949ba59abbe56e057f20f883e
3. md5 加密的缺点
理论上是不能破解的,因为md5采用的是不可逆算法。
有的网站上提供MD5解密,是因为有大量的存储空间来保存源码和加密后的密码,当解密时就是一个查询的过程,稍微复杂点的查询就无法完成。
这种解密方式,叫做 字典攻击
MD5 并不是一种加密算法,而是一种摘要算法。
https://zhuanlan.zhihu.com/p/387999509
三、bcryptjs
解决 字典攻击 的方式是 加盐。
bcryptjs 是 nodejs 中比较出色的一款处理加盐加密的包。
1. 何为加盐(Salt)
所谓加盐,就是在加密的基础上再加点“佐料”。这个“佐料”是系统随机生成的一个随机值,并且以随机的方式混在加密之后的密码中。
由于“佐料”是系统随机生成的,相同的原始密码在加入“佐料”之后,都会生成不同的字符串。
这样就大大的增加了破解的难度。
如果加盐还不行,还可以再来点味精、鸡精、生姜、胡椒.....
2. 使用 bcryptjs
1. 安装
$ npm install bcryptjs
2. 使用
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | // 引入 bcryptjs const bcryptjs = require( 'bcryptjs' ) // 原始密码 const password = '123456' /** * 加密处理 - 同步方法 * bcryptjs.hashSync(data, salt) * - data 要加密的数据 * - slat 用于哈希密码的盐。如果指定为数字,则将使用指定的轮数生成盐并将其使用。推荐 10 */ const hashPassword = bcryptjs.hashSync(password, 10) /** * 输出 * 注意:每次调用输出都会不一样 */ console.log(hashPassword) // $2a$10$P8x85FYSpm8xYTLKL/52R.6MhKtCwmiICN2A7tqLDh6rDEsrHtV1W /** * 校验 - 使用同步方法 * bcryptjs.compareSync(data, encrypted) * - data 要比较的数据, 使用登录时传递过来的密码 * - encrypted 要比较的数据, 使用从数据库中查询出来的加密过的密码 */ const isOk = bcryptjs.compareSync(password, '$2a$10$P8x85FYSpm8xYTLKL/52R.6MhKtCwmiICN2A7tqLDh6rDEsrHtV1W' ) console.log(isOk) |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)