使用 Jasypt 为Spring Boot配置文件中的密码加密

article/2025/10/8 22:22:56

在本教程中,我将指导您如何加密Spring Boot应用程序配置文件(应用程序.properties或应用程序.yml)中的敏感信息,例如数据源的用户名和密码,SMTP服务器的凭据等...使用Jasypt 库 – 为了提高基于Spring框架的Java应用程序的安全性。要学习本教程,您必须在计算机上(在任何 IDE 外部)安装 Maven。

1. 什么是Jasypt ?

Jasypt代表Java简化加密 - 一种高安全性和高性能的加密库,允许开发人员以最小的工作量为其项目添加基本的加密功能,而无需深入了解加密的工作原理。Jasypt提供基于标准的加密技术,可用于加密密码,文本,数字,二进制文件...它可以无缝、透明地与企业框架(如弹簧和休眠)集成。贾西普特易于使用,但高度可配置。有关更多信息,请访问Jasypt
主页。

2. 声明Jasypt Spring Boot和Jasypt Maven 插件的依赖关系

为了将 Jasypt 库用于弹簧启动应用程序,您需要在项目的 pom.xml 文件中声明以下依赖项:

1
2
3
4
5
<dependency>
  <groupId>com.github.ulisesbocchio</groupId>
  <artifactId>jasypt-spring-boot-starter</artifactId>
  <version>3.0.3</version>
</dependency>

这会将一些 JAR 文件添加到项目的类路径中,这有助于 Jasypt 透明地解密应用程序配置文件中的加密值。

然后,您还需要声明Jasypt ·Maven 插件,如下所示:

1
2
3
4
5
<plugin>
   <groupId>com.github.ulisesbocchio</groupId>
   <artifactId>jasypt-maven-plugin</artifactId>
   <version>3.0.3</version>
 </plugin>

此插件很重要,因为它允许使用Maven命令进行加密和解密,如以下各节所述。

3. 加密和解密单个字符串值

打开一个新的命令提示符窗口。将当前目录更改为 pom.xml 文件所在的项目目录。并键入以下命令:

1
mvn jasypt:encrypt-value -Djasypt.encryptor.password=cafe21 -Djasypt.plugin.value=n@mHm2020

这将运行 Jasypt Maven 插件来加密字符串,n@mHm2020使用私钥 cafe21 的默认加密配置。在输出中,你会看到它打印出类似下面的内容:

1
ENC(MBTWfX8gqMevQe5CKW0pToMbajnpJk0zlb3yoooiSWPjkfYrE8TFNF6vDEMXTu/j)

在这里,加密的值被包装在 ENC() 中,然后您可以使用此值替换配置文件中的密码。如果再次运行上述命令,您将看到不同的加密值,因为默认加密器使用随机生成器。这意味着字符串可以是不同的加密值,尽管私钥是相同的。默认加密算法是双向的,这意味着您可以进行解密。键入以下命令:

1
mvn jasypt:decrypt-value -Djasypt.encryptor.password=cafe21 -Djasypt.plugin.value=MBTWfX8gqMevQe5CKW0pToMbajnpJk0zlb3yoooiSWPjkfYrE8TFNF6vDEMXTu/j

这将使用带有私钥 cafe21 的默认加密配置解密指定的值。然后你会看到它打印原始值 n@mHm2020.So 这些加密和解密命令是你应该熟悉的非常基本的命令。

4. 加密应用程序属性文件中的凭据

假设您要在以下应用程序属性文件中加密 Spring 数据源的用户名和密码:

1
2
3
4
spring.jpa.hibernate.ddl-auto=none
spring.datasource.url=jdbc:mysql://localhost:3306/shopmedb
spring.datasource.username=root
spring.datasource.password=password

首先,将用户名和密码的值包装在 DEC() 中,如下所示:

1
2
3
4
spring.jpa.hibernate.ddl-auto=none
spring.datasource.url=jdbc:mysql://localhost:3306/shopmedb
spring.datasource.username=DEC(root)
spring.datasource.password=DEC(password)

在这里,DEC() 是一个占位符,它告诉 Jasypt 要加密什么,其余值保持不变。然后在命令提示符下,键入:

1
mvn jasypt:encrypt -Djasypt.encryptor.password=cafe21

然后,它将应用程序属性文件中的 DEC() 占位符替换为加密的值:

1
2
3
4
spring.jpa.hibernate.ddl-auto=none
spring.datasource.url=jdbc:mysql://localhost:3306/shopmedb
spring.datasource.username=ENC(9tl1aMX4Ije8n0+IcjyS...)
spring.datasource.password=ENC(IQi6U2g7sz4pw6wL4GoY...)

瞧!非常简单方便,对吧?无需手动复制和粘贴。只需将要加密的值放在 DEC() 中,然后运行 mvn 贾西普特:加密 命令。

5. 使用Jasypt 运行Spring Boot应用程序

现在,要运行Spring Boot应用程序,您需要在命令提示符中将私钥密码作为VM参数传递,如下所示:

1
java -Djasypt.encryptor.password=cafe21 –jar yourapp.jar

要在 Eclipse 或春季工具套件 IDE 中运行 Spring Boot 应用程序,您需要通过传递如下所示的 VM 参数来编辑运行配置:启动应用程序,当 Jasypt 透明地解密加密的凭据时,它将平稳运行。

6. 在 Spring 应用程序配置文件中解密凭据

如果要在弹簧启动配置文件中查看加密值的原始值,请键入以下 Maven 命令:

1
mvn jasypt:decrypt -Djasypt.encryptor.password=cafe21

Jasypt 将在输出中打印应用程序属性文件的内容,就像加密之前一样。因此,此命令对于检查和验证目的很有用。请注意,它不会更新配置文件。

7. 加密应用程序.yml 文件中的凭据

默认情况下,贾西普特将更新应用程序属性文件。如果您在项目中使用 application.yml,请在命令中指定文件的路径,如下所示:

1
mvn jasypt:encrypt -Djasypt.encryptor.password=cafe21 -Djasypt.plugin.path="file:src/main/resources/application.yml"

使用此语法,可以对任何所需的属性文件中的凭据进行加密。

8. 使用新的加密密码重新加密

如果要更改加密器的私钥(密码),只需使用以下命令:

1
mvn jasypt:reencrypt -Djasypt.plugin.old.password=cafe21 -Djasypt.encryptor.password=10duke

然后,Jasypt Maven插件将使用旧密码cafe21加密的值替换为使用新密码10duke加密的新值 - 并且您可以立即更新配置文件。非常 方便 。

9. 在 Spring 配置类中配置加密器

Jasypt 易于使用,正如您在上面的命令中看到的那样。如果您具有一定的密码学知识并且想要自定义加密器的设置,它也具有高度可配置性。例如,在项目中创建一个新的 Spring 配置类,如下所示:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
package net.codejava.security;
 
import org.jasypt.encryption.StringEncryptor;
import org.jasypt.encryption.pbe.PooledPBEStringEncryptor;
import org.jasypt.encryption.pbe.config.SimpleStringPBEConfig;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
 
@Configuration
public class JasyptAdvancedConfig {
 
    @Bean(name = "jasyptStringEncryptor")
    public StringEncryptor getPasswordEncryptor() {
        PooledPBEStringEncryptor encryptor = new PooledPBEStringEncryptor();
        SimpleStringPBEConfig config = new SimpleStringPBEConfig();
         
        config.setPassword("password"); // encryptor's private key
         
        config.setAlgorithm("PBEWithMD5AndDES");
        config.setKeyObtentionIterations("1000");
        config.setPoolSize("1");
        config.setProviderName("SunJCE");
        config.setSaltGeneratorClassName("org.jasypt.salt.RandomSaltGenerator");
        config.setStringOutputType("base64");
         
        encryptor.setConfig(config);
         
        return encryptor;
    }
}

此代码将覆盖默认加密配置,因此您需要编写一些代码来加密密码,如下所示:

1
2
3
String rawPassword = "password";
String encryptedPassword = encryptor.encrypt(rawPassword);
System.out.println(encryptedPassword);

然后通过将加密值放在 ENC() 中来更新弹簧启动应用程序配置文件,如下所示:

1
2
3
4
spring.jpa.hibernate.ddl-auto=none
spring.datasource.url=jdbc:mysql://localhost:3306/shopmedb
spring.datasource.username=ENC(encrypted_username)
spring.datasource.password=ENC(encrypted_password)

这是关于使用Jasypt库在弹簧启动配置文件中加密密码的教程。

 


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

相关文章

【Jasypt】Spring Boot 配置文件加解密 Jasypt 配置文件加密

Spring Boot 配置文件加解密 一、Jasypt简介二、集成方法2.1 方式一2.2 方式二2.3 方式三 三、Springboot整合Jasypt实战3.1 引入依赖3.2 编写配置类&#xff0c;配置相关信息3.3 使用Jasypt对数据库密码加密&#xff0c;并替换明文3.4 查看执行结果 四、拓展4.1 关于加解密秘钥…

【springboot】jasypt加密

参考&#xff1a; https://blog.csdn.net/enthan809882/article/details/105529349https://amore.blog.csdn.net/article/details/111468221https://blog.csdn.net/weixin_49076592/article/details/119797675 Jasypt Jasypt是加密库&#xff0c;支持密码、Digest认证、文本、…

jasypt-spring-boot 加密敏感信息

文章目录 一、简介二、导入依赖三、加密字段工具类四、application.yaml 配置五、启动类测试 一、简介 在后端开发中有很多敏感信息&#xff0c;比如数据库用户名密码&#xff0c;第三方 Apikey&#xff0c;云服务商的 secretKey 等、如果不希望用明文在 application.yml 配置…

jasypt-spring-boot敏感信息加密解密利器使用指南

1. 简介 Springboot整合Jasypt&#xff0c;实现配置信息的安全&#xff0c;如数据库连接.账号和密码.接口凭证信息等。 Jasypt可以为Springboot加密的信息很多&#xff0c;主要有&#xff1a; System Property 系统变量 Envirnment Property 环境变量 Command Line argument 命…

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

&#x1f353; 简介&#xff1a;java系列技术分享(&#x1f449;持续更新中…&#x1f525;) &#x1f353; 初衷:一起学习、一起进步、坚持不懈 &#x1f353; 如果文章内容有误与您的想法不一致,欢迎大家在评论区指正&#x1f64f; &#x1f353; 希望这篇文章对你有所帮助,欢…

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;为我们节省很多时间和精力。 对于一些学得比较深入的朋友来说&…