今天才知道密钥yuè的正确读音,我一个语言学硕士栽在这上面25年,⊙﹏⊙b汗, 写文章的时候输入法提醒我知道我读错了。算法
首先引入 bcrypt 插件npm
cnpm i bcrypt --save
复制代码
bcrypt.genSalt, bcrypt.hash 都是异步执行, 因此要在里面进行对secret赋值操做。安全
要使用 bcrypt.genSaltSync(rounds)
bcrypt.hashSync(data, salt)
用法和同步都是同样的, 只不过异步方法没有回调函数参数, 是返回布尔值bash
const bcrypt = require('bcrypt');
let password = 'hello world' //待加密的明文密码
let saltRounds = 10; //saltRounds: 正数,表明hash杂凑次数,数值越高越安全,默认10次。
// bcrypt是单向Hash加密算法 不能反向破解
var secret; 这个将会是加密后的密码,稍后用来比对
//bcrypt.genSalt是异步执行
bcrypt.genSalt(saltRounds, (err, salt) => {
//salt 是一串加密字符串, 128bits随机字符串,22字符, 会成为hash密码前面的一段
// console.log({ salt: salt })
//bcrypt.hash 是异步执行
bcrypt.hash(password, salt, function (err, hash) {
if (err) throw err;
console.log(hash)
secret = hash;
// 通过明文密码password和salt进行hash进行saltRounds次循环hash10次,获得的密码
// 输出结果, 由于是数字加密,因此每次都是不同的 , 后续要使用bcrypt.compare进行比较:
// 好比 :{ salt: '$2b$10$KnabCCverzpNFeHIbYgo4u' }
// {hash:'$2b$10$KnabCCverzpNFeHIbYgo4uTrcWEoJGvj5IBByoJLJ6iZKXq4BYdJS'}
});
})
复制代码
比对方法异步
bcrypt.compare(data明文, hash加密密码, cb回调函数)函数
也是异步方法,同步的话使用 compareSync(data, hash) 接收 return 传过来的布尔值ui
bcrypt.compare(password, secret, (err, result) => {
err ? console.log(err) : console.log(result)
})
复制代码
若是报错:Error: data and hash arguments required
加密
检查 bcrypt.compare 第二个参数是否为undefined;spa