Skip to content

字段加解密

最后更新: 几秒前
实践版本: v2.13.0

简介

continew-starter-security-crypto 是 ContiNew Starter 提供的基于注解的字段加解密模块,支持敏感数据的自动加密存储和解密展示,提供开箱即用的数据安全保护方案。

主要特性

  • 开箱即用: 基于注解的自动加解密处理
  • 多算法支持: 支持 AES、DES、RSA 等主流加密算法
  • 透明处理: 对业务代码无侵入,自动处理加解密逻辑
  • 性能优化: 支持加密结果缓存,提升性能

使用步骤

引入依赖

xml
<dependency>
    <groupId>top.continew.starter</groupId>
    <artifactId>continew-starter-security-crypto</artifactId>
</dependency>

全局配置

配置详情请查看:top.continew.starter.security.crypto.autoconfigure.CryptoProperties

yaml
--- ### 安全配置:字段加/解密配置
continew-starter.security:
  crypto:
    enabled: true
    # 对称加密算法密钥
    password: abcdefghijklmnop
    # 非对称加密算法密钥(在线生成 RSA 密钥对:http://web.chacuo.net/netrsakeypair)
    public-key: MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAM51dgYtMyF+tTQt80sfFOpSV27a7t9uaUVeFrdGiVxscuizE7H8SMntYqfn9lp8a5GH5P1/GGehVjUD2gF/4kcCAwEAAQ==
    private-key: MIIBVQIBADANBgkqhkiG9w0BAQEFAASCAT8wggE7AgEAAkEAznV2Bi0zIX61NC3zSx8U6lJXbtru325pRV4Wt0aJXGxy6LMTsfxIye1ip+f2WnxrkYfk/X8YZ6FWNQPaAX/iRwIDAQABAkEAk/VcAusrpIqA5Ac2P5Tj0VX3cOuXmyouaVcXonr7f+6y2YTjLQuAnkcfKKocQI/juIRQBFQIqqW/m1nmz1wGeQIhAO8XaA/KxzOIgU0l/4lm0A2Wne6RokJ9HLs1YpOzIUmVAiEA3Q9DQrpAlIuiT1yWAGSxA9RxcjUM/1kdVLTkv0avXWsCIE0X8woEjK7lOSwzMG6RpEx9YHdopjViOj1zPVH61KTxAiBmv/dlhqkJ4rV46fIXELZur0pj6WC3N7a4brR8a+CLLQIhAMQyerWl2cPNVtE/8tkziHKbwW3ZUiBXU24wFxedT9iV

使用 @FieldEncrypt 注解

在需要加密的实体类字段上添加 @FieldEncrypt 注解。

java
@Data
public class User {
    
    private Long id;
    
    /**
     * 用户名(普通字段)
     */
    private String username;
    
    /**
     * 密码(不可逆加密)
     */
    @FieldEncrypt(encryptor = BCryptEncryptor.class)
    private String password;
    
    /**
     * 手机号(加密字段)
     */
    @FieldEncrypt
    private String phone;
    
    /**
     * 邮箱(加密字段)
     */
    @FieldEncrypt
    private String email;
    
    // 其他字段略...
}

@FieldEncrypt 注解

java
/**
 * 字段加/解密注解
 *
 * @author Charles7c
 * @since 1.4.0
 */
@Target({ElementType.FIELD, ElementType.PARAMETER})
@Retention(RetentionPolicy.RUNTIME)
public @interface FieldEncrypt {

    /**
     * 加密/解密算法
     */
    Algorithm value() default Algorithm.AES;

    /**
     * 加密/解密处理器
     * <p>
     * 优先级高于加密/解密算法
     * </p>
     */
    Class<? extends IEncryptor> encryptor() default IEncryptor.class;

    /**
     * 对称加密算法密钥
     */
    String password() default "";
}

加密/解密算法枚举

目前支持的加密算法类型 Algorithm 如下:

枚举值算法名称
AESAES
DESDES
PBE_WITH_MD5_AND_DESPBE With MD5 And DES
RSARSA
Base64Base64

核心依赖

依赖描述
top.continew.starter:continew-starter-core核心模块
cn.hutool:hutool-cryptoHutool 加密解密模块(封装 JDK 中加密解密算法)
com.baomidou:mybatis-plus-extensionMyBatis Plus(MyBatis 的增强工具,在 MyBatis 的基础上只做增强不做改变,简化开发、提高效率)

参考资料

  1. Hutool 加密解密文档:https://hutool.cn/docs/#/crypto/概述