转载:
https://blog.csdn.net/yugongpeng/article/details/134446806
https://blog.csdn.net/weixin_45822938/article/details/123255566
基本使用
npm install bcrypt
const bcrypt = require('bcryptjs')
// bcrypt.hashSync(明文密码, 随机盐的长度)返回值是加密之后的密码字符串
password = bcrypt.hashSync(password, 10)
// 在用户进行修改密码,或者登录的时候,需要对密码进行验证
// 调用 bcrypt.compareSync(用户提交的密码, 数据库中的密码) 方法比较
// 返回值是布尔值(true 一致、false 不一致)
const compareResult = bcrypt.compareSync(password, results[0].password)
原理
bcrypt是一种基于哈希函数的加密算法,它使用一个密码和一个盐值作为输入,生成一个固定长度的密码哈希值。
bcrypt的盐值是一个随机生成的字符串,与密码一起用于哈希函数中,使得相同的密码在每次加密时都会生成不同的哈希值。
bcrypt的另一个重要特点是它使用了一个加密算法来混淆密码哈希值。这个加密算法使用一个密钥和一个初始化向量(IV)来加密密码和盐值。
加密后的数据被存储在数据库中,用于后续的密码验证。
bcrypt的加密过程可以分为以下几个步骤:
- 生成盐值:bcrypt使用一个随机数生成器生成一个随机的盐值。这个盐值是一个随机的字符串,用于与密码一起生成哈希值。
- 混合盐值和密码:将密码和盐值混合在一起,然后使用一个哈希函数生成一个固定长度的哈希值。
- 加密哈希值:使用一个加密算法将哈希值混淆,生成一个加密的哈希值。这个加密的哈希值被存储在数据库中。
- 验证密码:在验证密码时,用户输入密码,系统使用相同的盐值、哈希函数和加密算法生成一个新的哈希值。然后,将新的哈希值与数据库中的加密哈希值进行比较,如果它们匹配,则密码验证成功。