前言
一开始实现注册功能,可以看到数据库的数据如下:
密码是直接显示出来的
但实际操作中,我们需要把用户的密码进行加密再存储到数据库中来保证数据的安全性
本节就来介绍如何使用md5对用户的密码进行加密存储
引入内置模块crypto
新建utils文件夹,在里面新建文件md5.js用来写加密的方法。
这里我们要使用到一个内置模块crypto,直接引入即可
const crypto = require('crypto')
使用crypto
const crypto = require('crypto')
var d = crypto.createHash('md5').update('123').digest('hex')
讲一下参数的含义:
- 使用crypto.createHash方法,后面括号里面的内容代表使用的加密方式,这里就是md5
- 后面的.updata是代表对什么内容进行加密
- .digest是选择进行加密的算法,这里使用hex
上面代码中是把123进行加密,我们打印出来d看看结果:
上面的密文就是对123加密的结果,md5加密有一个特点:就是对相同值加密后的密文结果是一样的,这样就会导致能被暴力破解(拿着库里的密文去找对应的明文),对于这个问题有以下解决办法;
4. 在加密的值前加一个字符串前缀,如:
这样如果不知道前面的字符串是啥,很难破解后面的密码
const crypto = require('crypto')
var d = crypto.createHash('md5').update('by' + '123').digest('hex')
- 进行双层加密,就是第一次得到密文之后,对密文再次进行加密
导出方法
上面对加密的使用进行了讲解,下面直接将方法进行导出,方便使用:
const crypto = require('crypto')
module.exports = str => {
return crypto.createHash('md5')
.update('by' + str)
.digest('hex')
}
使用加密的方法
上面进行了导出,我们就可以直接使用了
我这里是直接在userModel.js中进行使用,先导入方法,然后在password中使用set方法调用我们封装的md5加密的方法:
password: {
type: String,
required: true,
set: value => md5(value),
select:false
},
这样就大功告成啦~~ 进行测试,发送注册的请求,查看数据库
数据库中用户的密码已经进行了加密处理: