密码加密BCryptPasswordEncoder

介绍

BCryptPasswordEncoderd 的encoder方法加密,每次加密后的密文都不相同,这使得,即使数据库中的密文被获取,也无法获取明文密码。
BCryptPasswordEncoder 实现使用广泛支持的“bcrypt”算法来对密码进行哈希处理。Bcrypt 使用随机的 16 字节盐值,是一种故意设计的慢速算法,以阻止密码破解者。您可以使用 strength 参数调整它的工作量,该参数取值范围为 4 到 31。值越高,计算哈希值所需的工作量就越多。默认值为 10 。您可以在部署的系统中更改此值,而不会影响现有密码,因为该值也存储在编码哈希中。以下示例使用 BCryptPasswordEncoder :
Spring Security中的BCryptPasswordEncoder类采用SHA-256 +随机盐+密钥对密码进行加密。SHA是一系列的加密算法,有SHA-1、SHA-2、SHA-3三大类,SHA-256是SHA-2下细分出的一种算法,此算法发生哈希碰撞的概率几乎为0,安全性高。

原理

BCryptPasswordEncoder 的工作原理

1. 盐值生成

在对密码进行加密时,BCryptPasswordEncoder 会先为每个密码生成一个随机的盐值(salt)。盐值是一段随机数据,会和密码一起参与哈希计算。其作用在于即使两个用户使用相同的密码,加密后的结果也会不同,从而增强密码的安全性。

2. 计算强度设置

BCryptPasswordEncoder 允许你设置计算强度(work factor),该值决定了哈希计算的迭代次数。计算强度越高,哈希计算所需的时间就越长,破解密码的难度也就越大。默认的计算强度是 10。

3. 哈希计算

借助 BCrypt 算法,将密码和盐值结合起来进行哈希计算。具体流程如下:
  • 把密码和盐值组合成一个字符串。
  • 依据设定的计算强度,对这个字符串进行多次迭代的哈希计算。
  • 最终得到一个固定长度的哈希值。

4. 存储和验证

加密后的密码会被存储到数据库中,存储的内容包含了盐值、计算强度和哈希值。当用户登录时,BCryptPasswordEncoder 会从存储的加密密码中提取盐值和计算强度,再用同样的算法对用户输入的密码进行哈希计算,最后将计算结果与存储的哈希值进行比较,以此判断密码是否正确。

使用

Loading...
文章列表
王小扬博客
云原生
Git
Elasticsearch
Apollo
产品
Think
生活技巧
软件开发
计算机网络
CI
DB
设计
缓存
Docker
Node
操作系统
Java
大前端
Nestjs
其他
PHP
AI