最近重写网站,后端 nodejs + mongoDB 。
在用户注册登录这一块,采用 bcrypt 加密密码,JWT 认证授权的方案。
这篇具体说 bcrypt。
bcrypt 的特点
- 加盐
- 由于彩虹表等破解技术只有在所有密码都以相同的方式哈希加密的情况下才有效,bcrypt采用随机加盐后再哈希的方法进行防范。
- 慢哈希
- 加盐哈希仍可能被暴力破解,所以bcrypt有一个可以自定义的参数,该值可以决定哈希函数缓慢的程度,理想的速度是:
- 用户感受不到
- 试图暴力破解的攻击者受不了
- 加盐哈希仍可能被暴力破解,所以bcrypt有一个可以自定义的参数,该值可以决定哈希函数缓慢的程度,理想的速度是:
nodejs 中的 bcrypt
之前项目中使用的是 bcrypt-nodejs
,该项目改进自 node.bcrypt.js
,主要优化了后者的依赖占用太多空间的缺点。
不过前者已经不再维护了,其官方推荐使用 bcrypt.