当前位置: 首页 > news >正文

使用Jasypt对配置文件内容加密

使用Jasypt 配置文件内容加密

一、背景

在软件开发过程中,配置文件扮演着至关重要的角色,它存储着应用程序运行所需的各种参数和设置,例如数据库连接信息、API 密钥、第三方服务的认证信息等。然而,这些配置文件中的信息往往包含敏感内容,如果以明文形式存储,会带来严重的安全风险。

1.1 数据泄露风险

在企业内部,配置文件可能会在不同的开发、测试、运维环境中流转,涉及多个人员和系统。一旦这些文件在传输或存储过程中被非法获取,其中的敏感信息就会直接暴露给攻击者,攻击者可以利用这些信息访问数据库、调用第三方服务等,从而造成数据泄露、服务被恶意使用等严重后果。

1.2 合规性要求

许多行业和地区都有严格的法律法规和合规性要求,例如 GDPR(通用数据保护条例)、HIPAA(健康保险流通与责任法案)等,要求企业对敏感数据进行加密保护。如果配置文件中的敏感信息未进行加密处理,企业可能会面临严重的法律处罚。

1.3 内部安全隐患

即使在企业内部,也存在内部人员误操作或恶意泄露敏感信息的风险。通过对配置文件进行加密,可以降低这种风险,只有拥有正确解密密钥的人员才能访问和使用这些敏感信息。

为了应对这些安全风险,我们可以使用 Jasypt 对配置文件中的敏感信息进行加密,确保数据的安全性和合规性。

二、简介

Jasypt 是一个 Java 库,可帮助开发者轻松实现数据加密和解密。在实际项目中,配置文件(如 application.propertiesapplication.yml)中常常包含敏感信息,像数据库密码、API 密钥等。为增强安全性,可使用 Jasypt 对这些敏感信息进行加密,避免明文存储。

三、环境准备

3.1 添加依赖

若使用 Maven 项目,需在 pom.xml 中添加 Jasypt 依赖:

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

若使用 Gradle 项目,在 build.gradle 中添加以下依赖:

implementation 'com.github.ulisesbocchio:jasypt-spring-boot-starter:3.0.5'

四、加密配置文件内容

4.1 配置加密密钥

Jasypt 需要一个加密密钥来进行加密和解密操作。可通过系统属性、环境变量或配置文件来设置密钥。

4.1.1 通过系统属性设置密钥

在启动应用时,可通过 -Djasypt.encryptor.password 参数来设置密钥:

java -Djasypt.encryptor.password=yourSecretKey -jar yourApplication.jar
4.1.2 通过环境变量设置密钥

在 Linux 或 macOS 系统中,可使用以下命令设置环境变量:

export JASYPT_ENCRYPTOR_PASSWORD=yourSecretKey

在 Windows 系统中,可使用以下命令:

set JASYPT_ENCRYPTOR_PASSWORD=yourSecretKey
4.1.3 通过配置文件设置密钥

application.propertiesapplication.yml 中设置密钥:

jasypt.encryptor.password=yourSecretKey
jasypt:encryptor:password: yourSecretKey

4.2 加密敏感信息

Jasypt 提供了命令行工具和 Java 代码两种方式来加密敏感信息。

4.2.1 使用命令行工具加密

Jasypt 提供了一个命令行工具 jasypt-cli,可用于加密和解密数据。首先,下载 Jasypt 的 JAR 文件,然后使用以下命令进行加密:

java -cp jasypt-<version>.jar org.jasypt.intf.cli.JasyptPBEStringEncryptionCLI input="yourSensitiveData" password=yourSecretKey algorithm=PBEWithMD5AndDES

其中,input 是要加密的敏感信息,password 是加密密钥,algorithm 是加密算法。

4.2.2 使用 Java 代码加密

也可以通过 Java 代码来加密敏感信息:

import org.jasypt.encryption.pbe.StandardPBEStringEncryptor;public class EncryptionExample {public static void main(String[] args) {StandardPBEStringEncryptor encryptor = new StandardPBEStringEncryptor();encryptor.setPassword("yourSecretKey");encryptor.setAlgorithm("PBEWithMD5AndDES");String sensitiveData = "yourSensitiveData";String encryptedData = encryptor.encrypt(sensitiveData);System.out.println("Encrypted data: " + encryptedData);}
}

4.3 在配置文件中使用加密信息

将加密后的信息添加到配置文件中,并使用 ENC() 包裹:

db.password=ENC(yourEncryptedData)
db:password: ENC(yourEncryptedData)

4.4配置包裹符号

在 Jasypt 里,默认的包裹符号是 ENC(),不过你能够通过配置来更改它。在 Spring Boot 项目中,你可以在 application.properties 或者 application.yml 里进行如下配置:

application.properties 中配置
jasypt.encryptor.property.prefix=yourPrefix(
jasypt.encryptor.property.suffix=)
application.yml 中配置
jasypt:encryptor:property:prefix: yourPrefix(suffix: )

五、解密配置文件内容

Jasypt 会自动识别配置文件中使用 ENC() 包裹的加密信息,并在应用启动时进行解密。只需确保在启动应用时设置了正确的加密密钥。

六、示例代码

以下是一个完整的 Spring Boot 示例,展示如何使用 Jasypt 对配置文件内容进行加密和解密:

6.1 创建 Spring Boot 项目

创建一个 Spring Boot 项目,并添加 Jasypt 依赖。

6.2 配置文件

application.properties 中添加加密信息:

jasypt.encryptor.password=yourSecretKey
db.password=ENC(yourEncryptedData)

6.3 读取配置信息

创建一个配置类来读取配置信息:

import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;@Component
public class DatabaseConfig {@Value("${db.password}")private String password;public String getPassword() {return password;}
}

6.4 测试

创建一个测试类来验证配置信息是否正确解密:

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.CommandLineRunner;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;@SpringBootApplication
public class Application implements CommandLineRunner {@Autowiredprivate DatabaseConfig databaseConfig;public static void main(String[] args) {SpringApplication.run(Application.class, args);}@Overridepublic void run(String... args) throws Exception {System.out.println("Decrypted password: " + databaseConfig.getPassword());}
}

七、注意事项

  • 密钥安全:加密密钥是非常敏感的信息,务必妥善保管,避免泄露。
  • 加密算法:可根据实际需求选择不同的加密算法,但要确保使用的算法是安全可靠的。
  • 版本兼容性:在使用 Jasypt 时,要确保其版本与项目的 Spring Boot 版本兼容。

相关文章:

  • 十天借助 Trae 实现 “幸运塔塔屋” 小程序时光记忆功能之旅
  • 学术AI工具推荐
  • 前端零基础入门到上班:Day7——表单系统实战全解析
  • 2025最新系统 Linux 教程(四)
  • Hadoop的三大结构及其作用
  • 开源 vs. 闭源:大模型的未来竞争格局
  • 学习设计模式《一》——简单工厂
  • 5.Rust+Axum:打造高效错误处理与响应转换机制
  • 4.18日学习--引用
  • LINUX418 加载YUM源 wireshark ping程序 解析
  • C++: 类和对象(中)
  • 从代码学习深度学习 - 小批量随机梯度下降 PyTorch 版
  • 从人工到智能:外呼系统如何重构企业效率新生态
  • RFID图书管理系统如何重构数字化仓储管理新生态
  • 架构师面试(三十二):注册中心数据结构
  • 米托蒽醌和阿克拉霉素 髓外 aml 疗效
  • 过去十年前端框架演变与技术驱动因素剖析
  • 从PDF到播客:MIT开发的超越NotebookLM的工具
  • 获取视频封面
  • 深度学习基础--CNN经典网络之InceptionV3详解与复现(pytorch)
  • 裁员15%、撤销132个机构,美国务院将全面重组
  • 马上评丨全面取消 “仅退款”,反内卷的必然
  • 中国驻日本大使馆发言人就日方涉靖国神社消极动向答记者问
  • 2025年度沪惠保参保今开启:保费不变,国内特药种类扩增
  • 一条水脉串起七个特色区块,上海嘉定发布2025年新城行动方案
  • GDP增长6.0%,一季度浙江经济数据出炉