安装bcrypt的步骤
安装依赖环境
1. python 2.x
2. node-gyp
npm install -g node-gyp
3. windows-build-tools
npm install --global --production windows-build-tools
安装bcrypt
npm install bcrypt
安装失败解决方法
第一种
//1.先全局删除依赖node-gyp
npm -g uninstall node-gyp 全局删除 node-gyp
//2.再次全局安装依赖
npm install node-gyp -g
//3.安装bcrypt
npm install bcrypt
第二种 使用bcryptjs替代
bcryptjs是一个第三方密码加密库,是对原有bcrypt的优化,优点是不需要安装任何依赖
//1.安装bcryptjs
npm install bcryptjs
//2.引入bcryptjs库
var bcrypt = require('bcryptjs');
//3.使用bcryptjs
如何使用bcryptjs
异步使用
//生成hash密码
/*
bcryptjs.genSalt(salt,func);
salt用于哈希密码的盐。如果指定为数字,则将使用指定的轮数生成盐并将其使用,推荐 10,数值越大 生成的随机字符串复杂度越高,数值越小 生成的随机字符串复杂度越低,该方法返回一个随机字符串
func回调函数
bcryptjs.hash(data,salt,func);
data要加密的数据,字符串类型
salt加密使用的盐
func回调函数
*/
var bcryptjs = require('bcryptjs');
bcryptjs.genSalt(10, function(err, salt) {
bcryptjs.hash("123456", salt, function(err, hash) {
console.log(hash);//每次调用生成的结果都不一样
});
});
//验证密码
/*
bcryptjs.compare(data,hash,function(err,res){});
data需要比较的数据,从前端传递过来的密码
hash是从数据库查询出来加密过的密码
function(err,res)回调函数,err是错误信息,res是比对的结果,boolean值,如果相等则为true,否则为false
一般回调函数中的第一个参数都是指错误信息
*/
bcryptjs.compare("123456", hash, function(err, res) {
// res === true //匹配成功
});
bcryptjs.compare("not_bacon", hash, function(err, res) {
// res === false //匹配失败
});
bcryptjs.compare("123456", hash).then((res) => {
//bcryptjs.compare方法返回一个promise对象,使用.then处理成功的情况.catch处理失败的情况,并且可以链式处理
// res === true
});
//快速生成hash值
bcryptjs.hash('bacon', 8, function(err, hash) {
});
同步使用
生成hash密码
var bcryptjs = require('bcryptjs');
var salt = bcryptjs.genSaltSync(10);
var hash = bcryptjs.hashSync("123456", salt);
密码验证
/*
bcryptjs.compareSync(data, encrypted)
* - data 要比较的数据, 使用登录时传递过来的密码
* - encrypted 要比较的数据, 使用从数据库中查询出来的加密过的密码
*/
bcryptjs.compareSync("123456", hash); // true 匹配相等的情况
bcryptjs.compareSync("89990", hash); // false 匹配不相等的情况
快速生成hash值
/*
bcryptjs.hashSync(data, salt)
* - data 要加密的数据
* - slat 用于哈希密码的盐。如果指定为数字,则将使用指定的轮数生成盐并将其使用。推荐 10
*/
var hash = bcryptjs.hashSync('bacon', 8);