如何将SpringBoot与jasypt结合,为敏感数据撑起安全保护伞?

2026-04-19 11:224阅读0评论SEO问题
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计1211个文字,预计阅读时间需要5分钟。

如何将SpringBoot与jasypt结合,为敏感数据撑起安全保护伞?

我们常常在yml配置文件中存储一些敏感数据,如数据库的用户名、密码,第三方应用的密钥等。这些信息直接以明文形式展示在文件中,显然存在较大的安全风险。因此,今天来聊聊如何提高yml配置文件的安全性。

我们经常会在yml配置文件中存放一些敏感数据,比如数据库的用户名、密码,第三方应用的秘钥等等。这些信息直接以明文形式展示在文件中,无疑是存在较大的安全隐患的,所以今天这篇文章,我会借助jasypt实现yml文件中敏感信息的加密处理。


一. jasypt介绍


Jasypt(Java Simplified Encryption)是一个Java库,它允许开发人员以最小的努力为项目添加基本的加密功能,而无需深入了解密码学的工作原理。

  • 基于标准的高安全性加密技术,适用于单向和双向加密。加密密码,文本,数字,二进制文件...
  • 与 Hibernate 的透明集成。
  • 适合集成到基于 Spring 的应用程序中,也可以透明地与 Spring 安全性集成。
  • 用于加密应用程序(即数据源)配置的集成功能。
  • 多处理器/多核系统中高性能加密的特定功能。
  • 开放 API 以与任何 JCE 提供程序一起使用。
  • ......

官网:www.jasypt.org/


二. SpringBoot项目中集成jasypt


基本用法

1.1 导入jar

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

1.2 修改yml配置文件

jasypt: encryptor: # 加密的秘钥 password: haha # 加密算法 algorithm: PBEWithMD5AndDES iv-generator-classname: org.jasypt.iv.NoIvGenerator property: # 算法识别的前后缀,默认ENC(),包含在前后缀的加密信息,会使用指定算法解密 prefix: Enc( suffix: ) jasypt: encryptor: # 加密的秘钥 password: haha # 加密算法 algorithm: PBEWithMD5AndDES iv-generator-classname: org.jasypt.iv.NoIvGenerator property: # 算法识别的前后缀,默认ENC(),包含在前后缀的加密信息,会使用指定算法解密 prefix: Enc( suffix: )

jasypt3.0后,默认支持的算法为 PBEWITHHMACSHA512ANDAES_256 ,该算法需要JDK1.9 以上支持或者添加JCE(Java Cryptography Extension 无限强度权限策略文件)支持。本例使用PBEWithMD5AndDES算法。


1.3 生成加密后的数据

package com.qfedu.day76.utils;import org.jasypt.encryption.pbe.StandardPBEStringEncryptor;import org.jasypt.encryption.pbe.config.EnvironmentStringPBEConfig; public class JasyptUtils { public static void main(String[] args) { String info = encrypt("root"); System.out.println(info); } /** * 加密 * * @param plaintext 明文 * @return */ public static String encrypt(String plaintext) { StandardPBEStringEncryptor encryptor = new StandardPBEStringEncryptor(); EnvironmentStringPBEConfig config = new EnvironmentStringPBEConfig(); // 指定算法 config.setAlgorithm("PBEWithMD5AndDES"); // 指定秘钥,和yml配置文件中保持一致 config.setPassword("haha"); encryptor.setConfig(config); // 生成加密数据 return encryptor.encrypt(plaintext); } /** * 解密 * * @param data 加密后数据 * @return */ public static String decrypt(String data) { StandardPBEStringEncryptor encryptor = new StandardPBEStringEncryptor(); EnvironmentStringPBEConfig config = new EnvironmentStringPBEConfig(); config.setAlgorithm("PBEWithMD5AndDES"); config.setPassword("haha"); encryptor.setConfig(config); // 解密数据 return encryptor.decrypt(data); }} package com.qfedu.day76.utils; import org.jasypt.encryption.pbe.StandardPBEStringEncryptor; import org.jasypt.encryption.pbe.config.EnvironmentStringPBEConfig; public class JasyptUtils { public static void main(String[] args) { String info = encrypt("root"); System.out.println(info); } /** * 加密 * * @param plaintext 明文 * @return */ public static String encrypt(String plaintext) { StandardPBEStringEncryptor encryptor = new StandardPBEStringEncryptor(); EnvironmentStringPBEConfig config = new EnvironmentStringPBEConfig(); // 指定算法 config.setAlgorithm("PBEWithMD5AndDES"); // 指定秘钥,和yml配置文件中保持一致 config.setPassword("haha"); encryptor.setConfig(config); // 生成加密数据 return encryptor.encrypt(plaintext); } /** * 解密 * * @param data 加密后数据 * @return */ public static String decrypt(String data) { StandardPBEStringEncryptor encryptor = new StandardPBEStringEncryptor(); EnvironmentStringPBEConfig config = new EnvironmentStringPBEConfig(); config.setAlgorithm("PBEWithMD5AndDES"); config.setPassword("haha"); encryptor.setConfig(config); // 解密数据 return encryptor.decrypt(data); } }

执行加密算法,加密后数据如下图所示:

如何将SpringBoot与jasypt结合,为敏感数据撑起安全保护伞?


替换yml中数据库的密码:

1.4 启动项目进行测试


OK,一切正常!


秘钥处理


将加密密码以明文形式写在配置文件中并不安全,实际开发中也不推荐这样使用。我们使用idea测试时,可以进行如下设置:



如果打包后部署项目,可以使用如下命令在启动项目时指定秘钥:


#方式1:java -jar xxx.jar -Djasypt.encryptor.password=加密数据的秘钥 #方式2:java -jar xxx.jar --jasypt.encryptor.password=加密数据的秘钥 #方式1: java -jar xxx.jar -Djasypt.encryptor.password=加密数据的秘钥 #方式2: java -jar xxx.jar --jasypt.encryptor.password=加密数据的秘钥

本文共计1211个文字,预计阅读时间需要5分钟。

如何将SpringBoot与jasypt结合,为敏感数据撑起安全保护伞?

我们常常在yml配置文件中存储一些敏感数据,如数据库的用户名、密码,第三方应用的密钥等。这些信息直接以明文形式展示在文件中,显然存在较大的安全风险。因此,今天来聊聊如何提高yml配置文件的安全性。

我们经常会在yml配置文件中存放一些敏感数据,比如数据库的用户名、密码,第三方应用的秘钥等等。这些信息直接以明文形式展示在文件中,无疑是存在较大的安全隐患的,所以今天这篇文章,我会借助jasypt实现yml文件中敏感信息的加密处理。


一. jasypt介绍


Jasypt(Java Simplified Encryption)是一个Java库,它允许开发人员以最小的努力为项目添加基本的加密功能,而无需深入了解密码学的工作原理。

  • 基于标准的高安全性加密技术,适用于单向和双向加密。加密密码,文本,数字,二进制文件...
  • 与 Hibernate 的透明集成。
  • 适合集成到基于 Spring 的应用程序中,也可以透明地与 Spring 安全性集成。
  • 用于加密应用程序(即数据源)配置的集成功能。
  • 多处理器/多核系统中高性能加密的特定功能。
  • 开放 API 以与任何 JCE 提供程序一起使用。
  • ......

官网:www.jasypt.org/


二. SpringBoot项目中集成jasypt


基本用法

1.1 导入jar

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

1.2 修改yml配置文件

jasypt: encryptor: # 加密的秘钥 password: haha # 加密算法 algorithm: PBEWithMD5AndDES iv-generator-classname: org.jasypt.iv.NoIvGenerator property: # 算法识别的前后缀,默认ENC(),包含在前后缀的加密信息,会使用指定算法解密 prefix: Enc( suffix: ) jasypt: encryptor: # 加密的秘钥 password: haha # 加密算法 algorithm: PBEWithMD5AndDES iv-generator-classname: org.jasypt.iv.NoIvGenerator property: # 算法识别的前后缀,默认ENC(),包含在前后缀的加密信息,会使用指定算法解密 prefix: Enc( suffix: )

jasypt3.0后,默认支持的算法为 PBEWITHHMACSHA512ANDAES_256 ,该算法需要JDK1.9 以上支持或者添加JCE(Java Cryptography Extension 无限强度权限策略文件)支持。本例使用PBEWithMD5AndDES算法。


1.3 生成加密后的数据

package com.qfedu.day76.utils;import org.jasypt.encryption.pbe.StandardPBEStringEncryptor;import org.jasypt.encryption.pbe.config.EnvironmentStringPBEConfig; public class JasyptUtils { public static void main(String[] args) { String info = encrypt("root"); System.out.println(info); } /** * 加密 * * @param plaintext 明文 * @return */ public static String encrypt(String plaintext) { StandardPBEStringEncryptor encryptor = new StandardPBEStringEncryptor(); EnvironmentStringPBEConfig config = new EnvironmentStringPBEConfig(); // 指定算法 config.setAlgorithm("PBEWithMD5AndDES"); // 指定秘钥,和yml配置文件中保持一致 config.setPassword("haha"); encryptor.setConfig(config); // 生成加密数据 return encryptor.encrypt(plaintext); } /** * 解密 * * @param data 加密后数据 * @return */ public static String decrypt(String data) { StandardPBEStringEncryptor encryptor = new StandardPBEStringEncryptor(); EnvironmentStringPBEConfig config = new EnvironmentStringPBEConfig(); config.setAlgorithm("PBEWithMD5AndDES"); config.setPassword("haha"); encryptor.setConfig(config); // 解密数据 return encryptor.decrypt(data); }} package com.qfedu.day76.utils; import org.jasypt.encryption.pbe.StandardPBEStringEncryptor; import org.jasypt.encryption.pbe.config.EnvironmentStringPBEConfig; public class JasyptUtils { public static void main(String[] args) { String info = encrypt("root"); System.out.println(info); } /** * 加密 * * @param plaintext 明文 * @return */ public static String encrypt(String plaintext) { StandardPBEStringEncryptor encryptor = new StandardPBEStringEncryptor(); EnvironmentStringPBEConfig config = new EnvironmentStringPBEConfig(); // 指定算法 config.setAlgorithm("PBEWithMD5AndDES"); // 指定秘钥,和yml配置文件中保持一致 config.setPassword("haha"); encryptor.setConfig(config); // 生成加密数据 return encryptor.encrypt(plaintext); } /** * 解密 * * @param data 加密后数据 * @return */ public static String decrypt(String data) { StandardPBEStringEncryptor encryptor = new StandardPBEStringEncryptor(); EnvironmentStringPBEConfig config = new EnvironmentStringPBEConfig(); config.setAlgorithm("PBEWithMD5AndDES"); config.setPassword("haha"); encryptor.setConfig(config); // 解密数据 return encryptor.decrypt(data); } }

执行加密算法,加密后数据如下图所示:

如何将SpringBoot与jasypt结合,为敏感数据撑起安全保护伞?


替换yml中数据库的密码:

1.4 启动项目进行测试


OK,一切正常!


秘钥处理


将加密密码以明文形式写在配置文件中并不安全,实际开发中也不推荐这样使用。我们使用idea测试时,可以进行如下设置:



如果打包后部署项目,可以使用如下命令在启动项目时指定秘钥:


#方式1:java -jar xxx.jar -Djasypt.encryptor.password=加密数据的秘钥 #方式2:java -jar xxx.jar --jasypt.encryptor.password=加密数据的秘钥 #方式1: java -jar xxx.jar -Djasypt.encryptor.password=加密数据的秘钥 #方式2: java -jar xxx.jar --jasypt.encryptor.password=加密数据的秘钥