字段加密
简介
continew-starter-encrypt-field 是 ContiNew Starter 加密模块提供的数据库字段加解密能力(@since 1.4.0),通过 MyBatis 拦截器对标注 @FieldEncrypt 注解的字段在写入时自动加密、查询时自动解密,对业务代码透明。
模块演进
本模块由原 continew-starter-security-crypto 模块在 v2.14.0 拆分而来,配置前缀变更为 continew-starter.encrypt.field,迁移说明参见字段加解密(已拆分)。
主要特性
- 无侵入: 基于 MyBatis 拦截器自动加解密,业务代码零改动
- 多算法: 内置 AES、DES、PBE With MD5 And DES、RSA、Base64,支持自定义加密器(IEncryptor SPI)
- 全场景: 覆盖实体字段、Map 参数、@Param 别名参数及 Wrapper 场景
- 编程式 API: 提供 EncryptHelper 工具类,支持非 ORM 场景手工加解密
快速开始
引入依赖
xml
<dependency>
<groupId>top.continew.starter</groupId>
<artifactId>continew-starter-encrypt-field</artifactId>
</dependency>添加配置
配置详情请查看:top.continew.starter.encrypt.field.autoconfigure.FieldEncryptProperties(@since 1.4.0)。
yaml
--- ### 字段加密配置
continew-starter.encrypt:
field:
# 是否启用(默认 true)
enabled: true
# 默认算法(默认 AES)
algorithm: AES
# 对称加密算法密钥
password: abcdefghijklmnop
# 非对称加密算法公钥(RSA 需要)
public-key: ''
# 非对称加密算法私钥(RSA 需要)
private-key: ''支持的算法
Algorithm 枚举:AES、DES、PBE_WITH_MD5_AND_DES、RSA、BASE64、DEFAULT(跟随配置属性的算法)。
使用 @FieldEncrypt 注解
在需要加密的实体类字段上添加 @FieldEncrypt 注解。
java
@Data
public class User {
private Long id;
/**
* 用户名(普通字段)
*/
private String username;
/**
* 手机号(加密字段,默认算法)
*/
@FieldEncrypt
private String phone;
/**
* 邮箱(加密字段,指定 RSA 算法)
*/
@FieldEncrypt(algorithm = Algorithm.RSA, publicKey = "...", privateKey = "...")
private String email;
}注解属性:value(算法,默认 DEFAULT 跟随全局配置)、encryptor(自定义加密处理器,优先级高于算法)、password / publicKey / privateKey(注解级密钥,优先于全局配置)。
编程式加解密
非 ORM 场景可使用 EncryptHelper(@since 2.13.2):
java
String ciphertext = EncryptHelper.encrypt("明文");
String plaintext = EncryptHelper.decrypt(ciphertext);核心依赖
| 依赖 | 描述 |
|---|---|
| top.continew.starter:continew-starter-encrypt-core | 加密模块 - 核心模块(IEncryptor SPI、算法枚举) |
| com.baomidou:mybatis-plus-extension | MyBatis Plus(拦截器扩展支撑) |