Spring Boot项目使用 jasypt 加密组件进行加密(例如:数据库、服务的Key、等等进行加密)

article/2025/10/9 0:09:08

🍓 简介:java系列技术分享(👉持续更新中…🔥)
🍓 初衷:一起学习、一起进步、坚持不懈
🍓 如果文章内容有误与您的想法不一致,欢迎大家在评论区指正🙏
🍓 希望这篇文章对你有所帮助,欢迎点赞 👍 收藏 ⭐留言 📝

🍓 更多文章请点击
在这里插入图片描述在这里插入图片描述

文章目录

  • 一、哪些信息要加密呢?
  • 一、如何加密配置项呢?
    • 1. 引入jasypt-spring-boot加密组件
    • 2. 配置加密密钥
    • 3. 加密
    • 4. 修改配置文件,替换待加密配置项
    • 5. 启动,测试
  • 三、疑问?
    • 1. 加密密钥必须放在ENC()中?为什么是ENC?
    • 2. 自定义的加密密钥假如泄露了,不还是有几率解密吗?
      • 2.1 使用自定义加密器
      • 2.2 加密密钥不要写在配置文件中
        • 2.2.1 方式一:直接作为程序启动时的命令行参数来带入
        • 2.2.2 方式二:直接作为程序启动时的应用环境变量来带入
        • 2.2.3 方式三:甚至可以作为系统环境变量的方式来带入
  • 四、加密工具类很多,这里再列举两种
    • 4.1 第一种
    • 4.2 第二种

21

一、哪些信息要加密呢?

密码配置项都不加密?想啥呢?
撒发一般来说,项目配置文件里,所有涉及信息安全的配置项都应该做处理,例如:

  • 用到的数据库、缓存的密码
  • 用到的中间件、消息队列的密码
  • 用到的各种第三方服务的Access_Key
  • 其他第三方服务的通信信息
  • …等等

最起码不能用明文直接写在配置文件里!

一、如何加密配置项呢?

1. 引入jasypt-spring-boot加密组件

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

2. 配置加密密钥

jasypt:encryptor:password: Encrypt

jasypt会使用这个自定义加密密钥,对配置文件里的重要项进行加密

3. 加密

我们直接扩展Spring Boot项目的启动类,项目启动时执行加密测试代码

@Component
public class SpringBootConfigEncrypt implements CommandLineRunner {@Autowiredprivate ApplicationContext applicationContext;@Autowiredprivate StringEncryptor encryptor;@Overridepublic void run(String... args) throws Exception {Environment environment = applicationContext.getBean(Environment.class);// 首先获取配置文件里的原始明文信息 // 根据自己配置文件中的密码读取路径自行更改String oldPassword = environment.getProperty("spring.datasource.dynamic.datasource.master.password");// 加密String encryptPassword = encrypt( oldPassword );// 打印加密前后的结果对比System.out.println( "MySQL原始明文密码为:" + oldPassword );System.out.println( "====================================" );System.out.println( "MySQL原始明文密码加密后的结果为:" + encryptPassword );}private String encrypt( String originPassord ) {return encryptor.encrypt( originPassord );}private String decrypt( String encryptedPassword ) {return encryptor.decrypt( encryptedPassword );}
}

运行项目,控制台打印:
在这里插入图片描述

4. 修改配置文件,替换待加密配置项

在这里插入图片描述在代码中使用时,jasypt-spring-boot组件会自动将ENC()语法包裹的配置项加密字段自动解密,数据得以还原。

5. 启动,测试

启动正常
在这里插入图片描述测试数据库查询,从而判断连接是否正常,成功
在这里插入图片描述

三、疑问?

1. 加密密钥必须放在ENC()中?为什么是ENC?

自定义的前后缀标记,比如我想换成CodeSheep()来标记加密字段,此时只需要在配置文件里配置一下前后缀即可:

jasypt:encryptor:property:prefix: Code(suffix: )

同样yml中的也需要更改
在这里插入图片描述

2. 自定义的加密密钥假如泄露了,不还是有几率解密吗?

自定义加密密钥泄露,那我们的加密字段也还是有可能被别人解密,为此,有几项工作可以让加密变得更加安全

2.1 使用自定义加密器

上文实验加密时,使用的是默认的加密规则,这一点会让当自定义加密密钥泄漏时可能变得不安全。为此我们可以自定义加密规则

@Configuration
public class CodeSheepEncryptorCfg {@Beanpublic StringEncryptor myEncryptStringEncryptor() {PooledPBEStringEncryptor encryptor = new PooledPBEStringEncryptor();SimpleStringPBEConfig config = new SimpleStringPBEConfig();config.setPassword("Encrypt");config.setAlgorithm("PBEWITHHMACSHA512ANDAES_256");config.setKeyObtentionIterations("1000");config.setPoolSize("1");config.setSaltGeneratorClassName("org.jasypt.salt.RandomSaltGenerator");config.setIvGeneratorClassName("org.jasypt.iv.RandomIvGenerator");config.setStringOutputType("base64");encryptor.setConfig(config);return encryptor;}
}

将加密测试代码的加密器进行修改

在这里插入图片描述

@Autowired注入原理:

  1. 先按照类型进行注入
  2. 如果在Spring容器中存在同一个类型的多个bean,那么此时在进行注入的时候是按照属性名称进行注入

2.2 加密密钥不要写在配置文件中

如果觉得上面这种方式还是可能会导致加密密钥泄露的话,可以直接将加密密钥从配置文件中拿掉,有三种方式

2.2.1 方式一:直接作为程序启动时的命令行参数来带入

java -jar app.jar --jasypt.encryptor.password=Encrypt

2.2.2 方式二:直接作为程序启动时的应用环境变量来带入

java -Djasypt.encryptor.password=Encrypt -jar app.jar

2.2.3 方式三:甚至可以作为系统环境变量的方式来带入

在这里插入图片描述

在这里插入图片描述登录环境和非登录环境读取配置文件的顺序是不一样的,Shell脚本内容过多,不进行详细介绍,可以在
Linux Shell编程入门到实战(一)
Linux Shell编程入门到实战(二)
中有详细介绍自行学习

我们提前配置好自定义全局环境变量,则直接在Spring Boot的项目配置文件中做如下配置即可:

linux中
  1. 编辑/etc/profile全局配置文件

    export JASYPT_ENCRYPTOR_PASSWORD = Encrypt
    
  2. 重载配置文件/etc/profile, 因为配置文件修改后要立刻加载里面的数据就需要重新加载

    source /etc/profile
    
  3. yml中

    jasypt:encryptor:password: ${JASYPT_ENCRYPTOR_PASSWORD}
    

    这时候也安全很多

四、加密工具类很多,这里再列举两种

加密工具类非常多,大家可以自行选择
这里列举其他两种:

4.1 第一种

public class JasyptUtil {public static void main(String[] arg) {StandardPBEStringEncryptor standardPBEStringEncryptor = new StandardPBEStringEncryptor();/*配置文件中配置如下的算法*/standardPBEStringEncryptor.setAlgorithm("PBEWithMD5AndDES");/*配置文件中配置的password*/standardPBEStringEncryptor.setPassword("Encrypt");/*要加密的文本*/String name = standardPBEStringEncryptor.encrypt("root");String password = standardPBEStringEncryptor.encrypt("123456");/*将加密的文本写到配置文件中*/System.out.println("name=" + name);System.out.println("password=" + password);}}

4.2 第二种

public class JasyptUtil {public static void main(String[] args) {String account = "root";String password = "123456";BasicTextEncryptor encryptor = new BasicTextEncryptor();//秘钥encryptor.setPassword("Encrypt");//密码进行加密String newAccount = encryptor.encrypt(account);String newPassword = encryptor.encrypt(password);System.out.println("加密后账号:" + newAccount);System.out.println("加密后密码:" + newPassword);}}

但是

在这里插入图片描述在这里插入图片描述


http://chatgpt.dhexx.cn/article/ptbWFx4s.shtml

相关文章

jasypt中的加密与解密

jasypt由于其使用的是PBEWithMD5AndDES加密方式&#xff0c;所以每次加密出来的结果都不一样&#xff0c;所以很适合对数据进行加密 没什么好说的了&#xff0c;直接看demo。 基本操作 添加依赖 <dependency><groupId>com.github.ulisesbocchio</groupId>&…

jasypt的基本原理

文章目录 一、jasypt的启动类加载二、 jasypt中Encryptor、Detector和Resolver加载三、jasypt中EnableEncryptablePropertiesBeanFactoryPostProcesso四、proxy代理方式增强propertySources五、wrapper包装类方式增强propertySources六、resolver中属性值解密 作者&#xff1a;…

Jasypt 开源加密库使用教程

目录 Jasypt 加密概述 Jasypt 快速使用 StringEncryptor 加解密 Jasypt 配置详解 Jasypt 加密概述 1、Jasypt Spring Boot 为 spring boot 应用程序中的属性源提供加密支持&#xff0c;出于安全考虑&#xff0c;Spring boot 配置文件中的敏感信息通常需要对它进行加密/脱敏…

使用jasypt 进行配置文件加密

项目中application.yml 配置文件的各种链接的username&#xff0c;password的值都是明文的&#xff0c;其实存在一定的安全隐患&#xff0c;这是可以使用jasypt 的方式进行明文加密, 需要注意的是 盐值和密文分开保存 参考学习-1 参考学习-2 下面实现最简单的配置 项目是sprin…

Jasypt实现数据加解密(脱敏)

场景一&#xff1a;对配置文件中的裸露的密码进行加密 1、添加依赖 <dependency><groupId>com.github.ulisesbocchio</groupId><artifactId>jasypt-spring-boot-starter</artifactId><version>3.0.4</version></dependency> …

加密组件Jasypt学习、实战及踩坑记录

概述 最近入职新公司&#xff0c;因几乎全部项目都使用到jasypt&#xff0c;故而初步学习记录下本文&#xff08;持续更新&#xff09;。 官网及GitHub给出的简介&#xff1a;使用简单&#xff0c;性能好&#xff0c;特性features非常丰富&#xff1b;支持 另&#xff0c;有个…

Jasypt加解密

Jasypt加密 Jasypt加密引言介绍整合SpringBoot引入依赖编写配置加密和解密通过Java程序获取密文和解密通过jasypt中jar包程序获取密文使用密文&#xff1a;ENC(密文) 异常问题JCE权限问题yml中带有引起的问题 关于盐值&#xff08;密钥&#xff09;配置设置其他 Jasypt加密 引…

微服务SpringBoot整合Jasypt加密工具

文章目录 一、Jasypt介绍二、Jasypt手动使用2.1 密码加密场景2.2 文本加密场景2.3 数值加密场景2.4 二进制数据加密场景 三、Jasypt整合SpringBoot四、生成环境启动无、参考文档 一、Jasypt介绍 Jasypt是Java加密工具包&#xff0c;能支持对密码的哈希加密&#xff0c;对文本和…

Springboot之Jasypt配置文件加密/解密

Jasypt配置文件加密/机密 一、Jasypt介绍二、Springboot整合Jasypt2.1 环境配置2.2 添加依赖2.3 添加Jasypt配置2.4 编写加/解密工具类2.5 修改配置文件2.5 如何进一步防止密码泄露2.5.1 自定义加密器2.5.3 加密盐值通过环境变量指定 文章系列 【一、Springboot之Jasypt配置文…

java中byte与int的转换原理

前些天遇到一个问题&#xff0c;byte[0] "A3"&#xff08;十六进制表示&#xff09; 但是在debug时显示的是 -93 &#xff0c;而如果直接赋值给int的变量也是-93.当然大部分人都知道这是不能直接赋值的&#xff0c;需要以下面的这种方式将byte转换成int&#xff1a;…

Java byte 转化为 String

1、Java 中 byte 转化为 String&#xff0c;代码如下 package nice.com.mian;import java.io.UnsupportedEncodingException;public class StringMain {public static void main(String[] args) throws Exception {byte[] bb {97,99,105,51,55};String str new String(bb, &…

Java byte[] 转 String的简单转换

简单的将byte[] 还原成了 String 值 [TOC] 代码&#xff1a; public class Test0719 {public static void main(String[] args) {String text "test";byte[] textBytes text.getBytes();String content byteToString(textBytes);System.out.println(textBytes &q…

java:int强制类型转换成byte

注&#xff1a;非常感谢评论的最佳戏子大佬指出了我的不足&#xff0c;已经进行修改 int强制类型转换成byte 一、基础知识二、int->byte方法一方法二 一、基础知识 int 在java中是32位&#xff0c; byte是8位 原码&#xff1a;就是二进制码&#xff0c;最高位为符号位&…

C#初级编程

Unity学习笔记——C#初级编程 一、Awake 和 Start二、Update 和 FixedUpdate三、启用和禁用组件四、SetActive、Active Self、Active in Hierarchy五、位置和旋转六、transform.lookAt(Transform target)七、线性插值八、Destroy九、GetButton 和 GetKey十、GetAxis十一、GetCo…

零基础怎样自学编程?新手如何学习编程?编程学习入门指南

对于编程&#xff0c;很多新手的第一感觉可能就是&#xff1a; 高深&#xff0c;难学。 学好编程&#xff0c;有的时候&#xff0c;可以把一些需要我们重复劳动的工作&#xff0c;自动化批量处理&#xff0c;为我们节省很多时间和精力。 对于一些学得比较深入的朋友来说&…

新手学计算机编程怎么入门 从哪学起

近些年有一种职业发展很快、人才需求量大、工资高&#xff0c;那就是程序员。他们的基本工作就是电脑编程&#xff0c;开发者各种各样的软件、APP&#xff0c;被很多人膜拜。如果你想成为一名程序员&#xff0c;有必要了解一下这些基本的电脑编程入门教程。 1计算机编程怎么入门…

代码编程教学入门

前言 代码编程是我们在现代能获得的最宝贵的技能之一&#xff0c;学会写代码不仅让我们在职业前景上更得心应手&#xff0c;而且还能让我们的大脑保持活跃和创造性&#xff0c;甚至我们还有机会创造出一些 awesome 的东西出来。 如果我们才刚刚开始&#xff08;或准备开始&am…

20道经典C语言编程题(初级)

编者按&#xff1a;以下20道题目为自己练习所写的代码&#xff0c;均已提交检测通过&#xff0c;其中有些题也许有更优的解法&#xff0c;所以写的不好望读者包涵&#xff0c;由于个人练习&#xff0c;所以没有写注释&#xff0c;有什么问题的地方&#xff0c;可以留言一起交流…

沈师 PTA 数据库题目及部分解析 第四章

判断题 1.在数据库安全性控制中&#xff0c;所有授予出去的权力在必要时都可以用REVOKE语句收回。 T 2.用户可以“自主”地决定将数据的存取权限授予何人、决定是否也将“授权”的权限授予别人&#xff0c;因此称这样的存取控制是自主存取控制。 T 3.数据库的安全性是指保护数据…