Skip to content

密码编码器

简介

continew-starter-encrypt-password-encoder 是 ContiNew Starter 加密模块提供的密码编码器(@since 1.3.0),基于 Spring Security Crypto 提供单向散列密码编码能力,默认装配 Spring 的 DelegatingPasswordEncoder

模块演进

v1.3.0 诞生于 security/password 模块,v2.13.4 融合进 security-crypto,v2.14.0 独立为 encrypt-password-encoder 模块,配置前缀变更为 continew-starter.encrypt.password-encoder

主要特性

  • 多算法: 内置 BCrypt、SCrypt、PBKDF2、Argon2 四种单向散列算法
  • 委托编码: 装配 DelegatingPasswordEncoder,密文自带 {algorithm} 前缀,便于算法平滑升级
  • 工具类: 提供 PasswordEncoderUtil 静态方法,脱离容器也可按算法编码/校验
  • 可桥接: 通过 PasswordEncoderEncryptor 可作为 @FieldEncrypt 的加密器使用(密码场景)

快速开始

引入依赖

pom.xml
xml
<dependency>
    <groupId>top.continew.starter</groupId>
    <artifactId>continew-starter-encrypt-password-encoder</artifactId>
</dependency>

添加配置

配置详情请查看:top.continew.starter.encrypt.password.encoder.autoconfigure.PasswordEncoderProperties

需显式开启

自动装配条件为 continew-starter.encrypt.password-encoder.enabled=true(未设置缺省匹配,默认不装配),引入依赖后请务必显式配置。

application.yml
yaml
--- ### 密码编码器配置
continew-starter.encrypt:
  password-encoder:
    # 是否启用(必须显式配置为 true)
    enabled: true
    # 默认启用的编码器算法(默认 BCRYPT)
    algorithm: BCRYPT

使用 PasswordEncoder

装配后直接注入 Spring 的 PasswordEncoder 使用(DelegatingPasswordEncoder,默认算法取配置项):

java
@RequiredArgsConstructor
@Service
public class DemoService {

    private final PasswordEncoder passwordEncoder;

    public void demo(String rawPassword) {
        // 编码:密文形如 {bcrypt}$2a$10$...
        String encoded = passwordEncoder.encode(rawPassword);
        // 校验
        boolean matches = passwordEncoder.matches(rawPassword, encoded);
    }
}

使用 PasswordEncoderUtil 工具类(@since 2.13.3)

java
// 按指定算法编码/校验,无需注入 Bean
String encoded = PasswordEncoderUtil.encode(PasswordEncoderAlgorithm.ARGON2, rawPassword);
boolean matches = PasswordEncoderUtil.matches(PasswordEncoderAlgorithm.ARGON2, rawPassword, encoded);

作为字段加密器使用(@since 2.13.3)

密码类字段(如登录密码)不可逆,可通过 PasswordEncoderEncryptor 桥接到 @FieldEncrypt

java
@FieldEncrypt(encryptor = PasswordEncoderEncryptor.class)
private String password;

不可逆

PasswordEncoderEncryptor 的解密操作恒返回原文(不可逆),仅适用于密码等单向散列场景;已符合算法格式的密文不会被重复编码。

核心依赖

依赖描述
top.continew.starter:continew-starter-encrypt-core加密模块 - 核心模块
org.springframework.security:spring-security-cryptoSpring Security 加密模块(提供各类密码编码器)