使用BCrypt加密,让你更安全的储存密码

1 篇文章 0 订阅
1 篇文章 0 订阅

简介

bcrypt是一个跨平台的文件加密工具,使用的是布鲁斯·施内尔在1993年发布的 Blowfish 加密算法。
Bcrypt生成的密文是60位的,并且不会想MD5那样重复

为什么不推荐使用MD5, SHA1, SHA2, SHA3等?

这些都是通用的hash,旨在用尽可能短的时间计算大量数据的摘要。这意味着它们可以用来很好的确保数据的完整性。

而当今服务器能够计算大约每秒330MB的MD5hash,如果你的用户使用6位的小写字母和数字做为密码,则你可以在40秒内测试该条件的每一种可能!而且相当于没有任何花费!!如果你花2000美刀和一周时间搭建一个小型超级计算机集群,这将让你尝试大约每秒700,000,000个密码,而且速度还会每秒向上增加!!!

盐没有多大帮助

盐对于防范字典攻击或蛮力攻击是无效的,你可以使用巨大的盐和很多穿插的盐,但它不会影响攻击者的破解速度,因为你的数据库中有hash和盐。
是否使用盐,只要使用的是专为速度而生的通用hash,那么上面的破解就会有效

用BCrypt解决这些问题

它太慢了!使用一种变体的Blowfish加密算法的密钥时间表并引入work factor,允许设定hash的复杂程度,让BCrypt可以跟上摩尔定律。还可以增加work factor,将hash变慢。
所以,这不是每40秒破解一次的密码,而是大约12年一次!你的密码可能不需要这种安全性,但是bcrypt允许您选择速度和安全性的平衡点。use it.

BCrypt是后端加密存储的解决方案,流程是:

请求传入后端
得到明文密码
使用BCrypt加密得到hash
存入数据库
返回结果

验密流程:

请求传入后端
得到明文密码
数据库取出对应hash
使用BCrypt验证
返回结果

node中的使用方法

  1. 安装
npm install bcrypt
  1. 使用
// 引入BCrypt模块
const bcrypt = require('bcrypt');
// 定义加密密码计算强度
const saltRounds = 10;
// 明文密码
const myPlaintextPassword = 'abc123456';
const someOtherPlaintextPassword = 'not_bacon';

下面两种方法是一样的加密效果

// 加密方法1(调用单独的函数生成盐和hash)
bcrypt.genSalt(saltRounds, function(err, salt) {
    bcrypt.hash(myPlaintextPassword, salt, function(err, hash) {
        // 数据库存入hash
    });
});

// 加密方法2(自动生成盐和hash)
bcrypt.hash(myPlaintextPassword, saltRounds, function(err, hash) {
    // 数据库存入hash
});

验密

// 从数据库得到hash
bcrypt.compare(myPlaintextPassword, hash, function(err, result) {
    // result == true
});
bcrypt.compare(someOtherPlaintextPassword, hash, function(err, result) {
    // result == false
});

更多方法可以参考官方文档

注意

  • saltRounds 表示密码加密的计算强度,从1级到10级,强度越高,密码越复杂,计算时间也越长。 值得注意的是,强度为1-3时强度太低,系统会默认使用强度为10的计算方式进行加密!
  • 每个bcrypt的执行,只使用字符串的前72个字节。匹配密码时忽略任何额外的字节。请注意,这不是前72个字符。字符串可以包含少于72个字符,同时占用超过72个字节(例如,包含Emojis的UTF-8编码的字符串)。

参考文章:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值