古之立大事者,不唯有超世之才,亦必有坚韧不拔之志 ——苏轼
写在前面
在写服务端的时候,经常会遇到存储存储密码的业务逻辑,如果我们的数据库存储的是明文密码的话,将会非常的不安全,bcrypt 模块帮你解决这个问题。
bcrypt 模块概述
bcrypt,是一个跨平台的文件加密工具。由它加密的文件可在所有支持的操作系统和处理器上进行转移。它的口令必须是8至56个字符,并将在内部被转化为448位的密钥。
采用的加密使用是单线程的,也就是说仅仅可以加密而不能解密,在加密的过程中可以生成随机的字符串来增加密码的难度
使用步骤
// 导入bcrypt模块
const bcrypt = require('bcrypt');
// 生成随机字符串 gen => generate 生成 salt 码
let salt = await bcrypt.genSalt(10);
// 使用随机字符串对密码进行加密
let pass = await bcrypt.hash('明文密码', salt);
密码对采用如下代码
// 密码比对
let isEqual = await bcrypt.compare('明文密码', '加密密码');
安装步骤
在通过 npm
命令安装 bcrypt
之前,我们需要先安装其依赖环境:
-
Python 2.X
-
node-gyp
命令
npm install -g node-gyp
-
windows-build-tools
命令
npm install --global --production windows-build-tools
-
安装
bcrypt
第三方模块命令
npm i bcrypt
完整示例代码
// 导入 bcrypt
const bcrypt = require('bcrypt')
async function run() {
/*
生产一个随机的字符串
使用 bcrypt.genSalt() 方法
该方法接受一个数值作为参数
* 数值越大,生成的随机字符串复杂度就越高
* 数值越小,生成的随机字符串复杂度就越低
默认值为 10
返回随机生成的字符串
*/
const salt = await bcrypt.genSalt(10);
/*
使用 bcrypt.hash() 方法对密码进行加密
参数:
* 1. 要进行加密的明文
* 2. 随机字符串
返回值是加密后的密码
*/
const result = await bcrypt.hash('123456', salt)
console.log(salt);
console.log(result);
/*
使用 bcrypt.compare() 方法进行密码的校对
参数:
* 明文密码
* 加密后的密码
返回一个布尔值
*/
let isEqual = await bcrypt.compare('123456', result);
console.log(isEqual); // true
}
run()