SpringBoot集成Jasypt实现敏感信息加密保护功能

 更新时间:2025年04月27日 10:35:15   作者:李博帅  
在数字化时代背景下,互联网渗透生活的方方面面,同时也带来了日益严峻的安全挑战,因此,采用有效的敏感信息加密手段不仅是保护知识产权和业务安全的必要举措,所以本文介绍了SpringBoot集成Jasypt实现敏感信息加密保护功能,需要的朋友可以参考下

前言

在数字化时代背景下,互联网渗透生活的方方面面,同时也带来了日益严峻的安全挑战。曾有知名企业工程师因将公司核心代码上传至开源平台导致公司损失惨重,受到法律制裁。这一事件暴露出企业对代码与配置信息保护的薄弱环节。

企业核心系统通常会在配置文件中存储数据库连接信息、第三方接口秘钥等敏感数据。如果以明文存在,一旦泄露,极易被恶意利用,造成严重经济和信誉损失。尤其是中小企业,在安全合规方面常存在疏漏,敏感信息暴露风险更大。

因此,采用有效的敏感信息加密手段不仅是保护知识产权和业务安全的必要举措,也符合行业安全规范和合规要求,能有效降低因信息泄露带来的安全风险。

哪些类型的敏感信息必须加密

  • 数据库用户名和密码
  • 缓存、消息队列等服务的认证信息
  • 第三方服务的 Access Key、Secret Key
  • 其他涉及系统间安全通信的凭证信息

以上信息若在配置文件中以明文形式存在,易成为攻击目标,因此必须采取加密手段保护。

敏感信息加密的核心价值

  • 防止泄漏风险放大:即使代码或配置文件泄露,密文因无法被直接识别,降低信息被直接利用的风险。
  • 符合安全合规机制要求:很多安全评审流程要求敏感信息不得以明文暴露,加密处理是审核通过前提。
  • 提升开发者安全意识:引导整个团队对安全问题保持高度警惕,减少人为失误造成的安全隐患。

选择 Jasypt 作为加密解决方案的理由

Jasypt(Java Simplified Encryption)是一个简洁、功能强大的Java加密库。其设计宗旨在于:

  • 开发者无需深入密码学细节即可轻松实现数据加解密
  • 兼具开箱即用的 Spring Boot 集成支持
  • 支持多种加密算法和配置选项
  • 简化配置文件中敏感配置的加密解密流程

Jasypt 官网项目地址:www.jasypt.org/

Spring Boot 集成 Jasypt 的多种方式

通用集成(基于自动配置)

针对绝大多数 Spring Boot 项目,可以直接引入 jasypt-spring-boot-starter 依赖,无需额外配置,自动完成环境整合。支持对配置文件中带有特定前后缀的密文自动解密。

<dependency>
  <groupId>com.github.ulisesbocchio</groupId>
  <artifactId>jasypt-spring-boot-starter</artifactId>
  <version>3.0.4</version>
</dependency>

无自动配置环境下启用加密属性

如果项目未使用 @SpringBootApplication@EnableAutoConfiguration,需要:

  • 引入 jasypt-spring-boot 依赖(非starter)
  • 在配置类添加注解 @EnableEncryptableProperties
@Configuration
@EnableEncryptableProperties
public class JasyptConfig {
  // 其他配置
}

对指定配置文件启用加密支持

无需在整个 Spring 环境开启加密属性的情况下,可以指定应用哪些配置文件支持加解密:

@Configuration
@EncryptablePropertySource("classpath:encrypted.properties")
public class JasyptConfig {
}

对于多配置文件支持:

@Configuration
@EncryptablePropertySources({
    @EncryptablePropertySource("classpath:encrypted1.properties"),
    @EncryptablePropertySource("classpath:encrypted2.properties")
})
public class JasyptConfig {
}

Jasypt 1.8 版本以后也支持 YAML 配置文件。

实战演练:Spring Boot 项目中 Jasypt 集成示例

引入依赖

采用自动配置方式,pom中添加:

<dependency>
  <groupId>com.github.ulisesbocchio</groupId>
  <artifactId>jasypt-spring-boot-starter</artifactId>
  <version>3.0.4</version>
</dependency>

配置 Jasypt 加密参数

在 application.yml 中添加如下配置信息:

jasypt:
  encryptor:
    algorithm: PBEWithMD5AndDES
    iv-generator-classname: org.jasypt.iv.NoIvGenerator
    property:
      prefix: IT(
      suffix: )

这里指定了加密算法为经典的 PBEWithMD5AndDES,同时定义了加密数据的前后缀,方便 Jasypt 自动识别哪些配置需要解密。

将敏感信息加密替换到配置文件中

例如,将数据库账号密码替换为密文格式:

spring:
  datasource:
    url: jdbc:mysql://localhost:3306/user2?useUnicode=true&characterEncoding=utf-8&useSSL=true&serverTimezone=Asia/Shanghai
    username: IT(MIJueAfnYWsKa2kiR8Qrrw==)
    password: IT(qH9m5vjj8RYULOASKdhlOw==)

注意:加密内容必须以配置的前缀 IT( 开始,后缀 ) 结束。

生成密文的多种方案

方案一:使用代码方式加密

示例代码:

public class JasyptEncryptUtils {

    private static final String ALGORITHM = "PBEWithMD5AndDES";
    private static final String PASSWORD = "PEB123@321BEP";

    public static String encrypt(String plaintext) {
        StandardPBEStringEncryptor encryptor = new StandardPBEStringEncryptor();
        EnvironmentStringPBEConfig config = new EnvironmentStringPBEConfig();

        config.setAlgorithm(ALGORITHM);
        config.setPassword(PASSWORD);
        encryptor.setConfig(config);

        return encryptor.encrypt(plaintext);
    }

    public static String decrypt(String ciphertext) {
        StandardPBEStringEncryptor encryptor = new StandardPBEStringEncryptor();
        EnvironmentStringPBEConfig config = new EnvironmentStringPBEConfig();

        config.setAlgorithm(ALGORITHM);
        config.setPassword(PASSWORD);
        encryptor.setConfig(config);

        return encryptor.decrypt(ciphertext);
    }

    public static void main(String[] args) {
        System.out.println(encrypt("root"));
        System.out.println(encrypt("123456"));
    }
}

方案二:利用命令行工具加密

在 jasypt-1.9.3.jar 包路径下执行:

加密命令:

java -cp jasypt-1.9.3.jar org.jasypt.intf.cli.JasyptPBEStringEncryptionCLI input='root' password=PEB123@321BEP algorithm=PBEWithMD5AndDES

解密命令:

java -cp jasypt-1.9.3.jar org.jasypt.intf.cli.JasyptPBEStringDecryptionCLI input='密文内容' password=PEB123@321BEP algorithm=PBEWithMD5AndDES

方案三:通过 Maven 插件加密

pom 中添加插件:

<plugin>
  <groupId>com.github.ulisesbocchio</groupId>
  <artifactId>jasypt-maven-plugin</artifactId>
  <version>3.0.4</version>
</plugin>

执行加密:

mvn jasypt:encrypt-value -Djasypt.encryptor.password="PEB123@321BEP" -Djasypt.plugin.value="需要加密的内容"

启动参数设置秘钥,确保安全

秘钥不应硬编码或保存在配置文件中,应通过以下方式传递:

  • 作为 Java 启动参数:
java -jar app.jar --jasypt.encryptor.password=PEB123@321BEP
  • 或作为 JVM 参数:
java -Djasypt.encryptor.password=PEB123@321BEP -jar app.jar

避免秘钥暴露才是真正保障系统安全的关键。

常见问题及解决策略

算法兼容性引发的启动错误

Jasypt 3.x 版本默认加密算法为 PBEWITHHMACSHA512ANDAES_256,此算法要求 JDK 9+ 或安装 JCE 无限制策略文件支持,低版本 JDK 或未安装会导致绑定参数失败。

解决方案:

  • 降低算法版本,切换为 PBEWithMD5AndDES
  • 指定无 IV 生成器:
jasypt:
  encryptor:
    algorithm: PBEWithMD5AndDES
    iv-generator-classname: org.jasypt.iv.NoIvGenerator
  • 或者降级 Jasypt 版本到 2.x

如何保证秘钥安全

  • 切勿将秘钥以明文形式存储在代码或配置中
  • 通过外部传参方式加载秘钥
  • 如有更高安全需求,可自定义加密器逻辑或结合硬件安全模块(HSM)

防止敏感信息误上传 Git 的多重手段

  • 规范代码提交流程和权限控制,减少因误操作泄露风险
  • 使用 .gitignore 文件忽略敏感配置文件,避免被跟踪提交
  • 利用敏感信息检测工具(如 git-secrets)对提交进行扫描,阻止敏感数据提交
  • 严格 Code Review 流程,团队互相监督发现潜在风险

这些手段结合加密技术,形成信息安全多道防线。

技术与法律的思考:代码归属权问题

近期发生的 Nginx 创始人被其前东家质疑代码归属事件,激发行业对程序员劳动成果归属的广泛讨论:

  • 通常在职期间的开发属于公司资产
  • 但开源精神与个人贡献之间需达成平衡与共识
  • 合同、企业制度、法律法规均需明确界定权责

这一复杂议题值得团队和企业深入思考,既要尊重知识产权,也要保护开发者权益。

结语

安全不仅是一段代码的加密,更是技术人员责任心的体现。Jasypt 为 Spring Boot 项目提供了简单易用的敏感信息加密方案,配合完善的秘钥管理和流程管控,可大幅提升系统安全等级。作为开发者,应始终将安全纳入日常开发习惯,筑牢业务护城河,防止数据泄露风险。

以上就是SpringBoot集成Jasypt实现敏感信息加密保护功能的详细内容,更多关于SpringBoot Jasypt敏感信息加密的资料请关注脚本之家其它相关文章!

相关文章

  • Java中MD5的使用代码示例

    Java中MD5的使用代码示例

    这篇文章主要给大家介绍了关于Java中MD5的使用示例,MD5加密是一种常见的加密方式,我们经常用在保存用户密码和关键信息上,需要的朋友可以参考下
    2023-08-08
  • Java项目常见工具类详解

    Java项目常见工具类详解

    这篇文章主要为大家总结了平时在Java项目中使用的工具类:JWT工具类、MD5工具类、视频点播工具类、公共常量工具类、日期操作工具类、Http客户端工具类和获取IP工具类。需要的可以参考一下
    2021-12-12
  • 解决mybatisPlus null 值更新的问题

    解决mybatisPlus null 值更新的问题

    这篇文章主要介绍了解决mybatisPlus null 值更新的问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-02-02
  • springboot注入yml配置文件 list报错的解决方案

    springboot注入yml配置文件 list报错的解决方案

    这篇文章主要介绍了springboot注入yml配置文件 list报错的解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-08-08
  • 关于Future机制原理及解析

    关于Future机制原理及解析

    这篇文章主要介绍了关于Future机制原理,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-11-11
  • 利用java生成二维码工具类示例代码

    利用java生成二维码工具类示例代码

    二维码对现在的人们来说再熟悉不过了,我们在开发的时候也经常会用到二维码,下面这篇文章主要给大家介绍了关于利用java生成二维码工具类的相关资料,文中给了详细的示例代码,需要的朋友可以参考借鉴,下面来一起看看吧。
    2017-09-09
  • 详解Java策略模式

    详解Java策略模式

    今天给大家带来的是关于Java的相关知识,文章围绕着Java策略模式展开,文中有非常详细的介绍及代码示例,需要的朋友可以参考下
    2021-06-06
  • Intellij IDEA连接Navicat数据库的方法

    Intellij IDEA连接Navicat数据库的方法

    这篇文章主要介绍了Intellij IDEA连接Navicat数据库的方法,本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借价值,需要的朋友可以参考下
    2021-03-03
  • springmvc 传递和接收数组参数的实例

    springmvc 传递和接收数组参数的实例

    下面小编就为大家分享一篇springmvc 传递和接收数组参数的实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-03-03
  • 整理Java编程中字符串的常用操作方法

    整理Java编程中字符串的常用操作方法

    这篇文章主要介绍了Java编程中字符串的常用操作方法的整理,字符串处理是Java入门学习中的基础知识,需要的朋友可以参考下
    2016-02-02

最新评论