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

防火防盗防小人 使用 Jasypt 库来加密配置文件

⚔️ 项目配置信息存放在哪?

在日常开发工作中,我们经常需要使用到各种敏感配置,如数据库密码、各厂商的 SecretId、SecretKey 等敏感信息。
通常情况下,我们会将这些敏感信息明文放到配置文件中,或者放到配置中心中。
然而,这种做法存在严重的安全隐患!

🔞 安全措施有哪些?

  1. 使用环境变量替代明文配置信息
    使用环境变量来替代配置文件中的明文敏感信息。在部署应用程序时,可以通过设置环境变量来传递敏感信息。
  2. 加密配置文件
    使用对称加密或非对称加密来加密配置文件,以保护敏感信息。在加密配置文件时,必须指定加密算法和密钥,以及解密时使用的密钥。
  3. 禁止将配置文件提交到代码仓库!
    为了防止配置文件泄露,应该禁止将配置文件提交到代码仓库中。可以将配置文件添加到 Gitignore 文件中,防止将其提交到代码仓库中。
  4. 使用安全的存储方式
    如果将敏感信息存储在配置文件中,应该确保使用安全的存储方式。可以将配置文件存储在受保护的目录中,并限制访问该目录的权限。
  5. 限制访问配置文件的权限!
    限制可以访问配置文件的用户和进程的权限,以防止未经授权的用户和进程访问配置文件。
  6. 审计配置文件的访问记录!
    定期审计配置文件的访问记录,以检测是否存在未经授权的访问。

🎯目标:

学会用Jasypt 库来加密配置文件!


文章目录

  • ⚔️ 项目配置信息存放在哪?
  • 🔞 安全措施有哪些?
  • 🎯目标:
  • 学习步骤:
  • 一、了解 Jasypt
    • Jasypt(Java Simplified Encryption)库
  • 二、引入 Jasypt 依赖
    • 建一个SpringBoot demo,引入 Jasypt 依赖(注意:这里只标 Jasypt 依赖,没说不用其他的依赖哈)
  • 三、实现加解密工具类 JasyptUtil
  • 四、进行一波单元测试
    • 拿 "CSNZ" 这个字符串加密
      • 得到的结果是:OJsBWVePwbelr5XKuWXhYw==
    • 拿 "OJsBWVePwbelr5XKuWXhYw==" 这个字符串解密
      • 得到的结果是:
  • 五、敏感配置进行加密处理
    • 修改加密工具库,密钥使用参数传入
    • 配置文件信息配置
    • 启动类,读取配置文件信息并打印
  • 六、项目,启动!
    • 传入参数
    • 大功告成!


学习步骤:

1、了解 Jasypt
2、引入 Jasypt 依赖
3、实现加解密工具类 JasyptUtil
4、先进行一波单元测试
5、敏感配置进行加密处理
6、项目,启动!

一、了解 Jasypt

Jasypt(Java Simplified Encryption)库

Jasypt 是一个开源的 Java 加密库,可以为应用程序提供加密和解密功能

二、引入 Jasypt 依赖

建一个SpringBoot demo,引入 Jasypt 依赖(注意:这里只标 Jasypt 依赖,没说不用其他的依赖哈)

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

三、实现加解密工具类 JasyptUtil

import lombok.AccessLevel;
import lombok.NoArgsConstructor;
import org.jasypt.properties.PropertyValueEncryptionUtils;
import org.jasypt.util.text.BasicTextEncryptor;
import org.springframework.beans.factory.annotation.Value;@NoArgsConstructor(access = AccessLevel.PRIVATE)
public final class JasyptUtil {/*** 加密时的密钥*/private static String PRIVATE_KEY = "Evw3vbDt";private static final String PREFIX = "ENC(";private static final String SUFFIX = ")";private static BasicTextEncryptor basicTextEncryptor = new BasicTextEncryptor();static {basicTextEncryptor.setPassword(PRIVATE_KEY);}/*** 明文加密*/public static String encrypt(String plaintext) {return basicTextEncryptor.encrypt(plaintext);}/*** 解密*/public static String decrypt(String ciphertext) {ciphertext = PREFIX + ciphertext + SUFFIX;if (PropertyValueEncryptionUtils.isEncryptedValue(ciphertext)) {String plaintext = PropertyValueEncryptionUtils.decrypt(ciphertext, basicTextEncryptor);return plaintext;}return "";}
}

四、进行一波单元测试

拿 “CSNZ” 这个字符串加密

@Test
public void testEncrypt() {String encrypt = JasyptUtil.encrypt("CSNZ");System.out.println(encrypt);
}

得到的结果是:OJsBWVePwbelr5XKuWXhYw==

拿 “OJsBWVePwbelr5XKuWXhYw==” 这个字符串解密

@Test
public void testDecrypt() {String decrypt = JasyptUtil.decrypt("OJsBWVePwbelr5XKuWXhYw==");System.out.println(decrypt);}

得到的结果是:

在这里插入图片描述

五、敏感配置进行加密处理

修改加密工具库,密钥使用参数传入

@Value("${jasypt.passKey}")
private static String PRIVATE_KEY;

配置文件信息配置

server:port: 8080encrypt:test:# 此处是密码的密文(文中示例的就是CSNZ的密文),要用 ENC() 进行包裹name: ENC(OJsBWVePwbelr5XKuWXhYw==)# 加密配置
jasypt:encryptor:# 指定加密密钥,生产环境需要放到启动参数password: ${jasypt.passKey}# 指定解密算法,需要和加密时使用的算法一致algorithm: PBEWithMD5AndDES# 指定 initialization vector 类型iv-generator-classname: org.jasypt.iv.NoIvGenerator

启动类,读取配置文件信息并打印

@SpringBootApplication
public class Application implements InitializingBean {public static void main(String[] args) {SpringApplication.run(Application.class, args);}@Value("${encrypt.test.name}")private String name;@Overridepublic void afterPropertiesSet() throws Exception {System.err.println("程序启动...");System.out.println(name);}
}

六、项目,启动!

传入参数

在这里插入图片描述

大功告成!

在这里插入图片描述

相关文章:

防火防盗防小人 使用 Jasypt 库来加密配置文件

⚔️ 项目配置信息存放在哪&#xff1f; 在日常开发工作中&#xff0c;我们经常需要使用到各种敏感配置&#xff0c;如数据库密码、各厂商的 SecretId、SecretKey 等敏感信息。 通常情况下&#xff0c;我们会将这些敏感信息明文放到配置文件中&#xff0c;或者放到配置中心中。…...

Spring Cloud学习(二)【Eureka注册中心】

文章目录 Eureka 注册中心Eureka 的作用 动手实践搭建 EurekaServer服务注册服务发现 Ribbon 负载均衡负载均衡原理IRule 接口&#xff08;负载均衡策略&#xff09;饥饿加载 Eureka 注册中心 服务调用出现的问题 不能采用硬编码服务消费者该如何获取服务提供者的地址信息&am…...

数据分析实战 | 线性回归——女性身高与体重数据分析

目录 一、数据集及分析对象 二、目的及分析任务 三、方法及工具 四、数据读入 五、数据理解 六、数据准备 七、模型训练 八、模型评价 九、模型调参 十、模型预测 实现回归分析类算法的Python第三方工具包比较常用的有statsmodels、statistics、scikit-learn等&#…...

python回文日期 并输出下一个ABABBABA型回文日期

题目&#xff1a; 输入&#xff1a; 输入包含一个八位整数N&#xff0c;表示日期 对于所有的测评用例&#xff0c;10000101 ≤N≤89991231&#xff0c;保证N是一个合法日期的8位数表示 输出&#xff1a; 输出两行&#xff0c;每行一个八位数。第一行表示下一个回文日期第二…...

Zotero拓展功能之Zotero Style

Zotero Style拓展功能 一、列&#xff1a; 1.简介 首先你必须知道Zotero的基本功能&#xff1a;右键任意一个列的名字&#xff0c;会弹出一个右键菜单&#xff0c;你可以勾选/取消勾选一个列&#xff0c;并且在最后有两个按钮&#xff0c;一个是“列设置”&#xff0c;一个是…...

小程序提交表单之后,清除表单form

构造表单 <form bindsubmit"bindFormSubmit"> <view class"main"><textarea name"textarea" value"{{content}}"></textarea> <button form-type"submit" type"primary" > 提交 &…...

Java程序设计实验5 | Java API应用

*本文是博主对Java各种实验的再整理与详解&#xff0c;除了代码部分和解析部分&#xff0c;一些题目还增加了拓展部分&#xff08;⭐&#xff09;。拓展部分不是实验报告中原有的内容&#xff0c;而是博主本人自己的补充&#xff0c;以方便大家额外学习、参考。 &#xff08;解…...

自媒体项目详述

总体框架 本项目主要着手于获取最新最热新闻资讯&#xff0c;以微服务构架为技术基础搭建校内仅供学生教师使用的校园新媒体app。以文章为主线的核心业务主要分为如下子模块。自媒体模块实现用户创建功能、文章发布功能、素材管理功能。app端用户模块实现文章搜索、文章点赞、…...

客服呼叫中心的语音质检工作

语音质检是呼叫中心运营中必不可缺少的一个环节&#xff0c;呼叫中心语音质检对坐席起着直接监督的作用&#xff0c;也正是这种监督约束推动着客服人员不断提升自身的业务能力。 而客服呼叫中心的质检结果中还蕴藏了大量有价值的信息&#xff0c;可以通过日常的质检工作真正发现…...

深度解密 | 灵脉SAST 3.0最新特性曝光

一、多模智能引擎焕新 2023年6月&#xff0c;灵脉SAST入选国际权威咨询机构Forrester发布的《The Static Application Security Testing Landscape》报告成为全球范围内仅有的两款亚太区SAST代表产品之一。 此次3.0版本重大焕新&#xff0c;灵脉SAST从检测工具的灵魂核心入手…...

NowCode JZ39 数组中出现次数超过一半的数字 简单

题目 - 点击直达 1. JZ39 数组中出现次数超过一半的数字 简单1. 题目详情1. 原题链接2. 题目要求3. 基础框架 2. 解题思路1. 思路分析2. 时间复杂度3. 代码实现 1. JZ39 数组中出现次数超过一半的数字 简单 1. 题目详情 1. 原题链接 NowCode JZ39 数组中出现次数超过一半的数…...

【SA8295P 源码分析 (一)】119 - QNX 中如何在代码中快速配置 TLMM_GPIO 或 PMIC_GPIO 中断 及 中断回调函数

【SA8295P 源码分析】119 - QNX 中如何在代码中快速配置 TLMM_GPIO 或 PMIC_GPIO 中断 及 中断回调函数 一、配置 TLMM GPIO15 中断示例代码二、配置 PMIC2 GPIO1 中断示例代码三、easy_irq 实现源码分析3.1 struct _easy_irq_ctx 结构体内容分析3.2 register_easy_irq_callbac…...

电大搜题:开启智能学习新时代

尊敬的读者朋友们&#xff0c;今天我将向您介绍一款能够让您轻松搜题、高效学习的神奇工具&#xff1a;电大搜题&#xff01;作为湖北开放大学和广播电视大学的学习者&#xff0c;您一定对于繁重的课业和复杂的试题感到头疼。但是&#xff0c;现在有了电大搜题微信公众号&#…...

19、Flink 的Table API 和 SQL 中的自定义函数及示例(4)

Flink 系列文章 1、Flink 部署、概念介绍、source、transformation、sink使用示例、四大基石介绍和示例等系列综合文章链接 13、Flink 的table api与sql的基本概念、通用api介绍及入门示例 14、Flink 的table api与sql之数据类型: 内置数据类型以及它们的属性 15、Flink 的ta…...

Vue23-props配置功能

Vue2&3-props配置功能 Vue2-props配置 功能&#xff1a;接收从其他组件传过来的数据&#xff0c;将数据从静态转为动态注意&#xff1a; 同一层组件不能使用props&#xff0c;必须是父组件传子组件的形式。父组件传数据&#xff0c;子组件接收数据。不能什么数据都接收&a…...

怎样使用ovsyunlive在web网页上直接播放rtsp/rtmp视频

业务中需要在网页中直接播放rtsp和rtmp视频&#xff0c;多方比较测试发现ovsyunlive的播放器能直接播放rtsp/rtmp视频&#xff0c;还是非常方便简洁&#xff0c;使用过程如下&#xff1a; 1&#xff0c;Windows系统在github上面下载ovsyunlive绿色包下载解压。 github地址&am…...

MySQL | 查询接口性能调优、编码方式不一致导致索引失效

背景 最近业务反馈&#xff0c;列表查询速度过慢&#xff0c;需要优化。 到正式环境系统去验证&#xff0c;发现没筛选任何条件的情况下&#xff0c;查询需要三十多秒&#xff0c;而筛选了条件之后需要13秒。急需优化。 先说结论&#xff1a;连表用的字段编码方式不一致导致索…...

ASUS华硕灵耀X2 Duo UX481FA(FL,FZ)_UX4000F工厂模式原装出厂Windows10系统

下载链接&#xff1a;https://pan.baidu.com/s/1sRHKBOyc3zu1v0qw4dSASA?pwd7nb0 提取码&#xff1a;7nb0 带有ASUS RECOVERY恢复功能、自带所有驱动、出厂主题壁纸、系统属性专属LOGO标志、Office办公软件、MyASUS华硕电脑管家等预装程序所需要工具&#xff1a;16G或以上…...

企业安全—三保一评

0x00 前言 本篇主要是讲解三保一评的基础知识&#xff0c;以及对为什么要进行这些内容的原因进行总结。 0x01 整体 1.概述 三保分别是&#xff0c;分保&#xff0c;等保&#xff0c;关保。 分保就是指涉密信息系统的建设使用单位根据分级保护管理办法和有关标准&#xff0c…...

“深入理解机器学习性能评估指标:TP、TN、FP、FN、精确率、召回率、准确率、F1-score和mAP”

目录 引言 分类标准 示例&#xff1a;癌症检测 1. 精确率&#xff08;Precision&#xff09; 2. 召回率&#xff08;Recall&#xff09; 3. 准确率&#xff08;Accuracy&#xff09; 4. F1-score 5. mAP&#xff08;均值平均精度&#xff09; 总结与通俗解释 引言 机器…...

智慧医疗能源事业线深度画像分析(上)

引言 医疗行业作为现代社会的关键基础设施,其能源消耗与环境影响正日益受到关注。随着全球"双碳"目标的推进和可持续发展理念的深入,智慧医疗能源事业线应运而生,致力于通过创新技术与管理方案,重构医疗领域的能源使用模式。这一事业线融合了能源管理、可持续发…...

376. Wiggle Subsequence

376. Wiggle Subsequence 代码 class Solution { public:int wiggleMaxLength(vector<int>& nums) {int n nums.size();int res 1;int prediff 0;int curdiff 0;for(int i 0;i < n-1;i){curdiff nums[i1] - nums[i];if( (prediff > 0 && curdif…...

前端开发面试题总结-JavaScript篇(一)

文章目录 JavaScript高频问答一、作用域与闭包1.什么是闭包&#xff08;Closure&#xff09;&#xff1f;闭包有什么应用场景和潜在问题&#xff1f;2.解释 JavaScript 的作用域链&#xff08;Scope Chain&#xff09; 二、原型与继承3.原型链是什么&#xff1f;如何实现继承&a…...

Spring数据访问模块设计

前面我们已经完成了IoC和web模块的设计&#xff0c;聪明的码友立马就知道了&#xff0c;该到数据访问模块了&#xff0c;要不就这俩玩个6啊&#xff0c;查库势在必行&#xff0c;至此&#xff0c;它来了。 一、核心设计理念 1、痛点在哪 应用离不开数据&#xff08;数据库、No…...

DeepSeek 技术赋能无人农场协同作业:用 AI 重构农田管理 “神经网”

目录 一、引言二、DeepSeek 技术大揭秘2.1 核心架构解析2.2 关键技术剖析 三、智能农业无人农场协同作业现状3.1 发展现状概述3.2 协同作业模式介绍 四、DeepSeek 的 “农场奇妙游”4.1 数据处理与分析4.2 作物生长监测与预测4.3 病虫害防治4.4 农机协同作业调度 五、实际案例大…...

python报错No module named ‘tensorflow.keras‘

是由于不同版本的tensorflow下的keras所在的路径不同&#xff0c;结合所安装的tensorflow的目录结构修改from语句即可。 原语句&#xff1a; from tensorflow.keras.layers import Conv1D, MaxPooling1D, LSTM, Dense 修改后&#xff1a; from tensorflow.python.keras.lay…...

Python Einops库:深度学习中的张量操作革命

Einops&#xff08;爱因斯坦操作库&#xff09;就像给张量操作戴上了一副"语义眼镜"——让你用人类能理解的方式告诉计算机如何操作多维数组。这个基于爱因斯坦求和约定的库&#xff0c;用类似自然语言的表达式替代了晦涩的API调用&#xff0c;彻底改变了深度学习工程…...

小智AI+MCP

什么是小智AI和MCP 如果还不清楚的先看往期文章 手搓小智AI聊天机器人 MCP 深度解析&#xff1a;AI 的USB接口 如何使用小智MCP 1.刷支持mcp的小智固件 2.下载官方MCP的示例代码 Github&#xff1a;https://github.com/78/mcp-calculator 安这个步骤执行 其中MCP_ENDPOI…...

写一个shell脚本,把局域网内,把能ping通的IP和不能ping通的IP分类,并保存到两个文本文件里

写一个shell脚本&#xff0c;把局域网内&#xff0c;把能ping通的IP和不能ping通的IP分类&#xff0c;并保存到两个文本文件里 脚本1 #!/bin/bash #定义变量 ip10.1.1 #循环去ping主机的IP for ((i1;i<10;i)) doping -c1 $ip.$i &>/dev/null[ $? -eq 0 ] &&am…...

用 FFmpeg 实现 RTMP 推流直播

RTMP&#xff08;Real-Time Messaging Protocol&#xff09; 是直播行业中常用的传输协议。 一般来说&#xff0c;直播服务商会给你&#xff1a; ✅ 一个 RTMP 推流地址&#xff08;你推视频上去&#xff09; ✅ 一个 HLS 或 FLV 拉流地址&#xff08;观众观看用&#xff09;…...