Java 中注解怎么在数据脱敏业务中精确标记敏感字段的加密算法

舞姬之光

舞姬之光

2026-07-31

533人浏览

原创

java注解本身不执行加密,而是通过参数精确声明算法、密钥、时机等信息,由处理器动态调度对应策略实现字段级精准加解密。

java 中注解怎么在数据脱敏业务中精确标记敏感字段的加密算法

Java 中注解本身不直接执行加密算法,而是作为“标记”和“配置载体”,把字段的脱敏/加密需求声明出来;真正执行加密逻辑的是配套的处理器(如序列化器、AOP切面、MyBatis 插件等)。所谓“精确标记加密算法”,本质是通过注解参数将算法类型、密钥来源、加解密时机等关键信息绑定到具体字段上,再由统一处理器按需调度。

下面从实际落地角度说明如何做到“精确”:

用注解声明加密意图与算法选择

注解需暴露可配置项,让开发者明确指定加密方式,而不是默认模糊处理。例如:
@Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
public @interface Encrypt {
    // 指定加密算法(非字符串硬编码,用枚举保证类型安全)
    CryptoAlgorithm algorithm() default CryptoAlgorithm.AES_GCM;

    // 密钥标识(用于从密钥管理服务或配置中心获取,而非写死在注解里)
    String keyId() default "default-aes-key";

    // 加密时机:仅存储时?仅响应时?还是双向?
    EncryptPhase phase() default EncryptPhase.STORE_ONLY;

    // 是否启用(避免全局开关失效时误操作)
    boolean enabled() default true;
}

其中 CryptoAlgorithm 枚举可定义:

  • AES_GCM(推荐,带完整性校验)
  • SM4(国密合规场景)
  • RSA(仅适合小数据,如加密 AES 密钥)
  • CUSTOM(配合 customHandler() 方法扩展)

让注解与具体加密实现解耦又联动

注解只声明“要什么”,不实现“怎么做”。真正的加解密由策略工厂按注解参数动态选取:
  • 注解中标记 algorithm = CryptoAlgorithm.SM4, keyId = "sm4-prod-key"
  • 处理器(如 MyBatis Plus 的 MetaObjectHandler 或 Spring AOP)读取该注解
  • 调用 CryptoStrategyFactory.getStrategy(annotation) 获取对应 SM4Encryptor 实例
  • 该实例从密钥中心拉取 sm4-prod-key 对应的密钥,执行加解密

这样,同一个注解可适配不同算法,同一算法也可复用不同密钥,精准可控。

Java JDK 25
Java JDK 25

Java JDK 25 来自 OpenJDK 官方归档,版本为 JDK 25,本条下载地址已指向官方 Windows x64 zip 安装包直链,适合调试旧项目或兼容旧版 Java 运行环境。

下载

结合使用场景区分加密与脱敏语义

注意:**加密 ≠ 脱敏**。注解设计必须体现业务意图差异:
  • @Encrypt:用于存储敏感字段(如密码、银行卡号),要求可逆、强安全、密钥受控
  • @Mask@Sensitive:用于展示层(如 API 返回),不可逆、规则简单(掩码/替换)、无密钥依赖

若强行用一个注解混用两者,会导致:

  • 存储字段被错误掩码(无法还原)
  • 展示字段被强加密(前端无法解析、性能浪费)

所以“精确标记”的前提是:先分清字段用途,再选对注解类型

支持运行时动态策略(应对合规变化)

某些监管要求会随时间调整(如某类数据从“可逆加密”改为“单向哈希”)。这时注解可预留扩展能力:
// 支持运行时覆盖策略
String strategyClass() default ""; // 指定自定义处理器全限定名
boolean useRuntimeConfig() default false; // 启用配置中心动态覆盖

useRuntimeConfig = true 时,处理器优先查配置中心(如 Apollo/Nacos)中 encrypt.user.id-card.strategy=HASH_SHA256,而非注解默认值——实现算法策略热更新,无需发版。

注解不是魔法,它的价值在于把“谁、在哪、用什么、怎么用”这四个问题,用声明式语法固化下来。只要参数设计贴合真实需求,配合清晰的处理器路由机制,就能做到字段级加密算法的精确绑定。

Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南

相关专题

更多
java
java

Java是一个通用术语,用于表示Java软件及其组件,包括“Java运行时环境 (JRE)”、“Java虚拟机 (JVM)”以及“插件”。php中文网还为大家带了Java相关下载资源、相关课程以及相关文章等内容,供大家免费下载使用。

2023.06.15

3792

6

java正则表达式语法
java正则表达式语法

java正则表达式语法是一种模式匹配工具,它非常有用,可以在处理文本和字符串时快速地查找、替换、验证和提取特定的模式和数据。本专题提供java正则表达式语法的相关文章、下载和专题,供大家免费下载体验。

2023.07.05

2796

9

java自学难吗
java自学难吗

Java自学并不难。Java语言相对于其他一些编程语言而言,有着较为简洁和易读的语法,本专题为大家提供java自学难吗相关的文章,大家可以免费体验。

2023.07.31

2824

8

java配置jdk环境变量
java配置jdk环境变量

Java是一种广泛使用的高级编程语言,用于开发各种类型的应用程序。为了能够在计算机上正确运行和编译Java代码,需要正确配置Java Development Kit(JDK)环境变量。php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

2023.08.01

637

3

java保留两位小数
java保留两位小数

Java是一种广泛应用于编程领域的高级编程语言。在Java中,保留两位小数是指在进行数值计算或输出时,限制小数部分只有两位有效数字,并将多余的位数进行四舍五入或截取。php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

2023.08.02

602

3

java基本数据类型
java基本数据类型

java基本数据类型有:1、byte;2、short;3、int;4、long;5、float;6、double;7、char;8、boolean。本专题为大家提供java基本数据类型的相关的文章、下载、课程内容,供大家免费下载体验。

2023.08.02

705

5

java有什么用
java有什么用

java可以开发应用程序、移动应用、Web应用、企业级应用、嵌入式系统等方面。本专题为大家提供java有什么用的相关的文章、下载、课程内容,供大家免费下载体验。

2023.08.02

1290

5

java在线网站
java在线网站

Java在线网站是指提供Java编程学习、实践和交流平台的网络服务。近年来,随着Java语言在软件开发领域的广泛应用,越来越多的人对Java编程感兴趣,并希望能够通过在线网站来学习和提高自己的Java编程技能。php中文网给大家带来了相关的视频、教程以及文章,欢迎大家前来学习阅读和下载。

2023.08.03

18844

3

配置java环境变量
配置java环境变量

配置Java环境变量是为了让操作系统能够识别和使用Java的相关命令和功能。本专题为大家提供配置java环境变量相关文章,帮助大家解决问题。

2023.08.03

646

8

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Java JDBC数据库连接官方教程
Java JDBC数据库连接官方教程

共0课时 | 0人学习

Java 26官方文档
Java 26官方文档

共0课时 | 0人学习