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

news2025/4/19 21:41:04

使用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 {

    @Autowired
    private DatabaseConfig databaseConfig;

    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }

    @Override
    public void run(String... args) throws Exception {
        System.out.println("Decrypted password: " + databaseConfig.getPassword());
    }
}

七、注意事项

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2338275.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【计算机视觉】OpenCV项目实战- Artificial-Eyeliner 人脸眼线检测

Artificial-Eyeliner 人脸眼线检测 项目介绍运行方式运行步骤常见问题及解决方法1. dlib 安装失败其他注意事项 2. 缺少 make / gcc3. **依赖库安装问题**&#xff1a;4. *人脸关键点检测失败&#xff1a;5. 眼线效果不理想&#xff1a;6. 实时处理延迟&#xff1a;7. 保存文件…

工作总结(十二)——迁移svn单项目到gitlab上,保留历史提交记录

文章目录 前言一、目的二、操作步骤1.创建项目库2.复制历史提交者账号3.复制待迁移项目以及历史记录4.push到gitlab远程仓库 总结 前言 本系列文章主要记录工作中一些需要记录的内容 一、目的 因为一些原因&#xff0c;我需要将svn库上的某个项目迁移到公司的gitlab库管理平台…

Git Flow

Git Flow深度解析&#xff1a;企业级分支管理实战指南 前言 在持续交付时代&#xff0c;分支策略决定团队协作效率。Git Flow作为经典的分支管理模型&#xff0c;被Apache、Spring等知名项目采用。2023年JetBrains开发者调查报告显示&#xff0c;Git Flow仍是中大型项目最常用…

Flink介绍——实时计算核心论文之Kafka论文详解

引入 我们通过S4和Storm论文的以下文章&#xff0c;已经对S4和Storm有了不错的认识&#xff1a; S4论文详解S4论文总结Storm论文详解Storm论文总结 不过&#xff0c;在讲解这两篇论文的时候&#xff0c;我们其实没有去搞清楚对应的流式数据是从哪里来的。虽然S4里有Keyless …

AI Agents系列之构建多智能体系统

&#x1f9e0; 向所有学习者致敬&#xff01; “学习不是装满一桶水&#xff0c;而是点燃一把火。” —— 叶芝 我的博客主页&#xff1a; https://lizheng.blog.csdn.net &#x1f310; 欢迎点击加入AI人工智能社区&#xff01; &#x1f680; 让我们一起努力&#xff0c;共创…

OJ笔试强训_1至24天

OJ笔试强训 Day01 [NOIP2010]数字统计_牛客题霸_牛客网 点击消除_牛客题霸_牛客网 两个数组的交集_牛客题霸_牛客网 Day02 牛牛的快递_牛客题霸_牛客网 最小花费爬楼梯_牛客题霸_牛客网 数组中两个字符串的最小距离__牛客网 Day03 简写单词_牛客题霸_牛客网 dd爱框框_…

3款顶流云电脑与传统电脑性能PK战:START云游戏/无影云/ToDesk云电脑谁更流畅?

这里写目录标题 一、前言二、本地机器配置环境三、START云游戏/无影云/ToDesk云电脑配置对比3.1 START云游戏3.2 无影云个人版3.3 ToDesk云电脑 四、本地电脑与云电脑性能实战4.1 游戏场景体验4.1.1 本地电脑测试4.1.2 云电脑测试英雄联盟黑神话悟空其他游戏 4.2 主流设计场景体…

java IO/NIO/AIO

(✪▽✪)曼波~~~~&#xff01;让曼波用最可爱的赛马娘方式给你讲解吧&#xff01;(⁄ ⁄•⁄ω⁄•⁄ ⁄) &#x1f3a0;曼波思维导图大冲刺&#xff08;先看框架再看细节哦&#xff09;&#xff1a; &#x1f4da; 解释 Java 中 IO、NIO、AIO 的区别和适用场景&#xff1a; …

java输出、输入语句

先创建一个用于测试的java 编写程序 #java.util使java标准库的一个包&#xff0c;这里拉取Scanner类 import java.util.Scanner;public class VariableTest {public static void main(String[] args) {#创建一个 Scanner 对象Scanner scanner new Scanner(System.in);System.…

宏基因组产品升级——抗菌肽数据库APD

抗菌肽&#xff08;Antimicrobial Peptides&#xff0c;简称AMPs&#xff09;是一类存在于多种生物体中的天然分子。它们在抵御微生物感染中扮演着重要角色&#xff0c;发挥着先天免疫反应的作用。抗菌肽功能分类广泛&#xff0c;包括&#xff1a;抗菌&#xff0c;抗生物膜&…

线程池七个参数的含义

Java中的线程池里七个参数的以及其各自的含义 面试题&#xff1a;说一下线程池七个参数的含义&#xff1f; 所谓的线程池的 7 大参数是指&#xff0c;在使用 ThreadPoolExecutor 创建线程池时所设置的 7 个参数&#xff0c;如以下源码所示&#xff1a; public ThreadPoolExe…

Windows suwellofd 阅读器-v5.0.25.0320

Windows suwellofd 阅读器 链接&#xff1a;https://pan.xunlei.com/s/VOO7tUkTHHTTjSe39CeVkUHbA1?pwd3ibx# OFD(Open Fixed-layout Document) &#xff0c; 数科OFD阅读器支持国标版式、可信阅读、是电子发票、电子证照&#xff0c;电子病历等电子文件理想阅读工具。 多格…

三大等待和三大切换

三大等待 1、三大等待&#xff1a;等待的方式有三种&#xff1a;强制等待&#xff0c;隐性等待&#xff0c;显性等待。 1、强制等待&#xff1a;time.sleep(2)&#xff0c;秒 优点&#xff1a;使用简单缺点&#xff1a;等待时间把握不准&#xff0c;容易造成时间浪费或者等待时…

告别定时任务!用Dagster监听器实现秒级数据响应自动化

在数据管道开发中&#xff0c;我们经常面临需要根据外部事件触发计算任务的场景。传统基于时间的调度方式存在资源浪费和时效性不足的问题。本文将通过Dagster的**传感器&#xff08;Sensor&#xff09;**功能&#xff0c;演示如何构建事件驱动的数据处理流程。 场景模拟&…

【Unity】打包TextMeshPro的字体

前言 在Unity中&#xff0c;TextMeshPro与常规 Text 组件相比提供了更高级的文本呈现功能&#xff0c;TextMesh Pro 可以处理各种语言&#xff0c;包括中文。我们可以轻松地在 Unity 项目中使用中文&#xff0c;而不必担心字体和布局问题。TextMeshPro需要的字体资源就需要我们…

51单片机实验五:A/D和D/A转换

一、实验环境与实验器材 环境&#xff1a;Keli&#xff0c;STC-ISP烧写软件,Proteus. 器材&#xff1a;TX-1C单片机&#xff08;STC89C52RC&#xff09;、电脑。 二、 实验内容及实验步骤 1.A/D转换 概念&#xff1a;模数转换是将连续的模拟信号转换为离散的数字信…

使用VHD虚拟磁盘安装双系统,避免磁盘分区

前言 很多时候&#xff0c;我们对现在的操作系统不满意,就想要自己安装一个双系统 但是安装双系统又涉及到硬盘分区,非常复杂,容易造成数据问题 虚拟机的话有经常用的不爽,这里其实有一个介于虚拟机和双系统之间的解决方法,就是使用虚拟硬盘文件安装系统. 相当于系统在机上…

Kafka消费者端重平衡流程

重平衡的完整流程需要消费者 端和协调者组件共同参与才能完成。我们先从消费者的视角来审视一下重平衡的流程。在消费者端&#xff0c;重平衡分为两个步骤&#xff1a;分别是加入组和等待领导者消费者&#xff08;Leader Consumer&#xff09;分配方案。这两个步骤分别对应两类…

Django之modelform使用

Django新增修改数据功能优化 目录 1.新增数据功能优化 2.修改数据功能优化 在我们做数据优化处理之前, 我们先回顾下传统的写法, 是如何实现增加修改的。 我们需要在templates里面新建前端的页面, 需要有新增还要删除, 比如说员工数据的新增, 那需要有很多个输入框, 那html…

云轴科技ZStack入选中国人工智能产业发展联盟《大模型应用交付供应商名录》

2025年4月8日至9日&#xff0c;中国人工智能产业发展联盟&#xff08;以下简称AIIA&#xff09;第十四次全体会议暨人工智能赋能新型工业化深度行&#xff08;南京站&#xff09;在南京召开。工业和信息化部科技司副司长杜广达&#xff0c;中国信息通信研究院院长、中国人工智能…