- MD5 是一种加密算法,在调用这个算法的时候,提供一个密码的明文, 调用的结果,得到一个 32 位长度的密文;
- **MD5 算法的特性:**相同的字符串,如果多次调用 md5 算法,得到的结果,完全一样;
- MD5 算法,无法被逆向解密;
- 但是,基于 md5 算法的第二个特性,我们可以进行碰撞暴力破解;(MD5 存在被暴力破解的安全性问题)
- 为了解决 简单的明文密码,被 md5 加密后,通过 暴力破解的安全性问题, 然后就出现了加盐的MD5加密;
- 目前,md5的暴力破解,又升级了,升级到了
彩虹表
; - 由于彩虹表出现,我们推荐大家,在存储网站密码的时候,使用
bcrypt
加密算法,得到加密之后的密文进行存储;
bcrypt 加密算法
- 在调用加密算法的时候,需要手动提供一个
幂次
; - 调用加密算法,得到的加密结果格式:
$版本号$循环的幂次$22位的随机盐 31位的密文
- 加密的
随机盐
和加密的幂次
,和加密算法的版本号
已经被存储到了真正的密文中;
- 加密的
项目中使用 bcrypt 的步骤
-
运行
npm i node-pre-gyp -g
-
在项目根目录中,打开终端,运行
cnpm install bcrypt -S
-
导入
bcrypt
// 导入加密的模块 const bcrypt = require('bcrypt')
-
定义幂次:
// 定义一个 幂次 const saltRounds = 10 // 2^10
-
调用
bcrypt.hash()
加密:// 加密的方法 bcrypt.hash('123', saltRounds, (err, pwdCryped) => { console.log(pwdCryped) })
-
调用
bcrypt.compare()
对比密码是否正确:// 对比 密码的方法 bcrypt.compare('123', '$2b$10$i1ufUKnC9fXTsF9oqqvLMeDnpNfYIvhyqKRG03adiebNFPkjW3HPW', function(err, res) { console.log(res) // 内部对比的过程: // 1. 先获取 输入的明文 // 2. 获取输入的密文 // 2.1 从密文中,解析出来 bcrypt 算法的 版本号 // 2.2 从密文中,解析出来 幂次 // 2.3 从密文中,解析出来前 22 位 这个随机盐 // 3. compare 方法内部,调用 类似于 hash 方法 把 明文,幂次,随机盐 都传递进去 最终得到正向加密后的密文 // 4. 根据最新得到的密文,和 compare 提供的密文进行对比,如果相等,则 返回 true ,否则返回 false; })
相关文章
- node.js中express-session配置项详解
- MD5在线生成器1
- MD5在线生成器2
gklfang/article/details/50998959) - MD5在线生成器1
- MD5在线生成器2
- JavaScript-MD5