bcrypt单向加密的使用 和 密钥yuè比对的使用方法

本文详细介绍如何使用bcrypt插件进行密码加密与比对。包括安装bcrypt、设置saltRounds参数、生成salt、使用bcrypt.hash进行密码加密以及使用bcrypt.compare进行密码比对的方法。

今天才知道密钥yuè的正确读音,我一个语言学硕士栽在这上面25年,⊙﹏⊙b汗, 写文章的时候输入法提醒我知道我读错了。

首先引入 bcrypt 插件

cnpm i bcrypt --save
复制代码

给明文加密

bcrypt.genSalt, bcrypt.hash 都是异步执行, 所以要在里面进行对secret赋值操作。

如果使用同步方法,

要使用 bcrypt.genSaltSync(rounds) bcrypt.hashSync(data, salt) 用法和同步都是一样的, 只不过异步方法没有回调函数参数, 是返回布尔值

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 传过来的布尔值


bcrypt.compare(password, secret, (err, result) => {
    err ? console.log(err) : console.log(result)
})
复制代码

如果报错:Error: data and hash arguments required

检查 bcrypt.compare 第二个参数是否为undefined;

bcrypt 是一个 Node.js 模块,可以用于密码哈希加密。它基于 Blowfish 算法,使用 salt 密钥来生成哈希值。以下是 bcrypt 模块的基本使用方法 API: 1. 安装 bcrypt 模块 使用 npm 安装 bcrypt 模块: ```bash npm install bcrypt ``` 2. 加密密码 使用 bcrypt.hash() 方法来生成哈希值。该方法需要两个参数:要加密的明文密码 salt 的轮数,salt 的轮数越多,哈希值越复杂、越安全。下面是一个示例代码片段: ```javascript const bcrypt = require('bcrypt'); const password = 'myPassword123'; const saltRounds = 10; bcrypt.hash(password, saltRounds, function(err, hash) { if (err) { console.log(err); } else { console.log(hash); } }); ``` 在这个例子中,password 是要加密的明文密码,saltRounds 是 salt 的轮数,bcrypt.hash() 方法将这两个值作为参数,并通过回调返回哈希值。如果出现错误,回调将会传递一个错误对象,否则回调将传递哈希值。 3. 比较密码 使用 bcrypt.compare() 方法来比较明文密码哈希值。该方法需要两个参数:要比较的明文密码已经加密的哈希值。以下是一个示例代码片段: ```javascript const bcrypt = require('bcrypt'); const password = 'myPassword123'; const hash = '$2b$10$e9bqjKoIFfXu6gYlojx6vOc.SQpA2Yl2koSxVW3jGmF3C5m/nW4GK'; bcrypt.compare(password, hash, function(err, result) { if (err) { console.log(err); } else if (result) { console.log('Password match'); } else { console.log('Password does not match'); } }); ``` 在这个例子中,password 是要比较的明文密码,hash 是已经加密的哈希值。bcrypt.compare() 方法将这两个值作为参数,并通过回调返回比较结果。如果明文密码与哈希值匹配,则会输出 "Password match",否则输出 "Password does not match"。 4. API bcrypt 模块的常用 API 如下: - bcrypt.hash():生成哈希值。 - bcrypt.compare():比较明文密码哈希值。 - bcrypt.genSalt():生成 salt。 - bcrypt.getRounds():获取 salt 的轮数。 - bcrypt.setRandomFallback():设置随机数生成器的回退方法。 更多 API 详细说明,请参考官方文档:https://github.com/kelektiv/node.bcrypt.js#api。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值