node.js后端BCrypt对密码进行加密解密

在用户模块,对于用户密码的保护,通常都会进行加密然后存放在数据库中,在用户进行登录的时候,将其输入的密码进行加密然后与数据库中存放的密文进行比较,以验证用户密码是否正确。目前,MD5和BCrypt比较流行。
BCrypt是单向Hash加密算法,一般用于密码加密,相对来说,BCrypt比MD5更安全 ,但是MD5加密会更快速。 MD5是一种可反向破解的密码加密,如果你的密文被截获它就可以在MD5在线解密破解得到密码,然后就可以根据你的账号密码登录账号。而Bcrypt类似Pbkdf2算法不可反向破解生成明文(不可逆加密),所以即使黑客截获到密文也无法转换成明文(BCrypt不支持反运算, 只支持密码校验)。虽然不能转换成明文密码,但是它还是会被彩虹破解,只是相对于破解时间来说两者差别巨大,如果非要举例说明一下,用彩虹破解MD5可能需要3分钟左右,而BCrypt就需要14年之久。所以一般都推荐使用bcrypt。
BCrypt加密原理:输入的明文密码通过10次循环加盐后得到myHash(版本+salt),然后存入数据库。系统在验证用户的口令时,需要从myHash中取出salt跟password进行hash;得到的结果保存在DB中的hash进行比对,如果一致才算验证通过。

加密 

const mongoose = require('../db');
const LoginSchame = new mongoose.Schema({
    image:String,
    nickname:String,
    phone:String,
    password:{
        type:String,
        set (val) {
            //hashSync()第一个参数为需要加密的内容,第二个参数是加密后的字段
            return require('bcryptjs').hashSync(val, 10)
          }
    },
    
});

const LoginModel = mongoose.model('login', LoginSchame, 'login');

module.exports = { LoginModel };

解密 

 

前两个参数分别是数据库中的密码和要验证的密码,第三个参数是个回调函数,主要用来验证密码是否匹配。

// 进行密码比较
bcrypt.compareSync(password, PasswordHash, (err, isMatch) => {
  if (err) {
    // 如果比较过程中出现错误,则处理错误
    console.error('Error comparing passwords:', err);
  } else if (isMatch) {
    // 如果密码匹配,则进行后续操作
    console.log('Password is match.');
  } else {
    // 如果密码不匹配,则进行后续操作
    console.log('Password is not match.');
  }
});



或者。。。


// 进行密码比较
 if (!bcrypt.compareSync(password, PasswordHash)) {
          return res.send({
            code:501,
            msg:"密码错误"
          })
        }

okla!!!

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值