springboot3 使用 jasypt 加密配置文件的使用步骤

 更新时间:2024年11月08日 10:35:57   作者:鲁子狄  
在SpringBoot项目中,使用Jasypt加密配置文件可以有效保护敏感信息,首先,需添加Jasypt依赖并配置加密密码,可在application.properties或通过启动参数、环境变量设置,本文介绍了Jasypt的配置步骤及使用方法,帮助开发者保护应用配置信息

在线密码生成器 : Most Reliable Online Password Generator | Free and Secure (getmypassword.com)

官网 : jasypt

使用步骤 :

1. 添加依赖 :

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

2.配置加密密码

Jasypt需要一个密码来进行加密和解密操作。可以通过以下几种方式配置这个密码:

在配置文件中指定 :在你的application.propertiesapplication.yml配置文件中,添加jasypt.encryptor.password配置项,并设置你的密码。例如:

# application.properties
jasypt.encryptor.password=your_encryption_password

或者,在application.yml中:

jasypt:
  encryptor:
    password: your_encryption_password

然而,将密码直接写在配置文件中可能存在安全风险。因此,更推荐的做法是通过启动参数或环境变量来传递这个密码。

  • 通过启动参数指定:在启动应用程序时,可以通过

-Djasypt.encryptor.password=your_encryption_password参数来指定加密密码。

使用环境变量:在某些情况下,使用环境变量来存储敏感信息(如加密密码)可能更为安全。具体方法取决于你的应用程序部署环境。

3. 加密敏感信息

在配置加密密码后,你可以使用Jasypt提供的工具或API来加密你的敏感信息。加密后的信息将以密文形式存储。

使用Jasypt CLI工具:Jasypt提供了一个命令行界面(CLI)工具,允许你在命令行中加密和解密字符串。你需要下载Jasyptjar包,并在命令行中运行相应的命令。

Jasypt JAR 文件下载地址 :

jasypt-1.9.3.jar

生成密钥

使用 Jasypt 提供的命令行工具生成密钥。

java -cp jasypt-1.9.3.jar org.jasypt.intf.cli.JasyptPBEStringEncryptionCLI input="your-strong-password" password="your-secret-key" algorithm=PBEWithMD5AndTripleDES
  • input:你要加密的字符串,例如数据库连接字符串、用户名、密码等。
  • password:用于加密的密钥。
  • algorithm:加密算法,推荐使用 PBEWITHHMACSHA512ANDAES_256

使用Jasypt API :在你的Java应用程序中,你可以通过注入StringEncryptor接口的实现类来编程方式加密和解密字符串。这通常在你的Spring Boot应用程序中通过自动装配完成。

/**
 * 加密控制器
 *
 * @author 鲁子狄
 **/
@SaIgnore
@RequiredArgsConstructor
@RestController
@RequestMapping("/jasypt")
public class JasyptController {
    private final StringEncryptor stringEncryptor;
    /**
     * 加密
     *
     * @param text 明文
     * @return 密文
     */
    @RequestMapping("/encrypt")
    public String encrypt(String text) {
        return stringEncryptor.encrypt(text);
    }
    /**
     * 解密
     *
     * @param text 密文
     * @return 明文
     */
    @RequestMapping("/decrypt")
    public String decrypt(String text) {
        return stringEncryptor.decrypt(text);
    }
}

4. 将加密信息存储到配置文件中

密钥格式如下:

ENC(your-encrypted-string)

加密敏感信息后,你需要将这些加密后的信息存储到配置文件中。在Jasypt中,加密后的信息通常以ENC(...)的形式出现,括号内是加密后的密文。例如:

username: ENC(aHApYu/25KrMl/q6Mr7X+0jYRC8E52V62ciUqtzDelELeHUwUrgGDl1oQJVUeXCt)
password: ENC(A0bDpXcWODFJ7JXiDNVKU5n49RSLM4Q3e5ZtS5T+fTY54S12zazVyxHhbV49OzY7)

5.应用程序启动时自动解密

当你的Spring Boot应用程序启动时,Jasypt会自动检测配置文件中的ENC(...)字符串,并使用你配置的加密密码来解密这些字符串。解密后的明文将用于应用程序的配置中。

注意: 如过用环境变量传参,本地启动时需要传入环境变量,jar包运行也一样

-Djasypt.encryptor.password=your-encryptor-password

本地

jar包命令 :

java -Djasypt.encryptor.password=your-encryptor-password -jar your-jar
配置参数描述示例
jaspyt.encryptor.password加密器的密码,用于解密属性jaspyt.encryptor.password=mySecretPassword
jaspyt.encryptor.algorithm加密算法的名称jaspyt.encryptor.algorithm=PBEWithMD5AndDES
jaspyt.encryptor.keyObtentionIterations获取密钥时使用的迭代次数jaspyt.encryptor.keyObtentionIterations=1000
jaspyt.encryptor.poolSize加密池的大小(如果使用了池化加密器)jaspyt.encryptor.poolSize=1
jaspyt.encryptor.providerName加密提供者的名称(如JCE提供者)jaspyt.encryptor.providerName=SunJCE
jaspyt.encryptor.saltGeneratorClassName盐生成器的类名jaspyt.encryptor.saltGeneratorClassName=org.jasypt.salt.RandomSaltGenerator
jaspyt.encryptor.ivGeneratorClassName初始向量生成器的类名jaspyt.encryptor.ivGeneratorClassName=org.jasypt.iv.NoIvGenerator
jaspyt.encryptor.stringOutputType加密字符串的输出类型(如base64)jaspyt.encryptor.stringOutputType=base64
jaspyt.encryptor.property.prefix加密属性前缀,用于识别加密属性jaspyt.encryptor.property.prefix=ENC(
jaspyt.encryptor.property.suffix加密属性后缀,用于识别加密属性jaspyt.encryptor.property.suffix=)
jaspyt.encryptor.proxyPropertySources是否通过代理截取属性值以进行解密jaspyt.encryptor.proxyPropertySources=true

支持的加密算法

Jasypt支持多种加密算法以保护敏感数据。以下是Jasypt支持的一些常见加密算法:

加密算法名称描述
PBEWithMD5AndDES基于密码的加密(PBE),使用MD5作为散列函数和DES作为加密算法。这是一种较旧的加密算法,但在某些旧系统中可能仍在使用
PBEWithMD5AndTripleDES与PBEWithMD5AndDES类似,但使用TripleDES作为加密算法,提供了更强的安全性。
PBEWithHMACSHA512ANDAES_256使用HMAC-SHA-512散列函数和AES-256加密算法的组合,提供了非常高的安全性。这是Jasypt较新版本中推荐的加密算法之一(默认值)
AES高级加密标准(AES),是一种广泛使用的对称加密算法。Jasypt支持不同长度的AES密钥,如AES-128、AES-192和AES-256
RSARivest-Shamir-Adleman(RSA)算法,是一种非对称加密算法。它使用一对密钥:公钥用于加密数据,私钥用于解密数据

到此这篇关于springboot3 使用 jasypt 加密配置文件的文章就介绍到这了,更多相关springboot3 jasypt 加密配置文件内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 利用Java编写一个出敬业福的小程序

    利用Java编写一个出敬业福的小程序

    新年将至,又开始扫福活动,每年的敬业福成了大家难过的坎。所以本文将介绍一个通过Java编写的一款福字生成器,感兴趣的小伙伴可以试一试
    2022-01-01
  • 关于Springboot的扩展点DisposableBean的原理解析

    关于Springboot的扩展点DisposableBean的原理解析

    这篇文章主要介绍了关于Springboot的扩展点DisposableBean的原理解析,DisposableBean是一个接口,为Spring bean提供了一种释放资源的方式 ,只有一个扩展方法destroy(),需要的朋友可以参考下
    2023-05-05
  • SpringMVC 中文乱码的解决方案

    SpringMVC 中文乱码的解决方案

    这篇文章主要介绍了SpringMVC 中文乱码的解决方案,帮助大家更好的理解和学习使用SpringMVC,感兴趣的朋友可以了解下
    2021-04-04
  • java拷贝指定目录下所有内容到minIO代码实例

    java拷贝指定目录下所有内容到minIO代码实例

    这篇文章主要介绍了java拷贝指定目录下所有内容到minIO代码实例,创建桶 直接使用工具类先判断,再创建即可,创建文件夹,需要注意以"/"结尾,实际也是在minIO上创建文件,只是作为目录的表现形式展示,需要的朋友可以参考下
    2024-01-01
  • Java设计模式之职责链模式详解

    Java设计模式之职责链模式详解

    Java设计模式中有很多种类别,例如单例模式、装饰模式、观察者模式等。本文将为大家详细介绍其中的职责链模式,感兴趣的可以了解一下
    2021-12-12
  • Java web实现购物车案例

    Java web实现购物车案例

    这篇文章主要为大家详细介绍了Java web实现购物车案例,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-08-08
  • 浅谈redis key值内存消耗以及性能影响

    浅谈redis key值内存消耗以及性能影响

    这篇文章主要介绍了浅谈redis key值内存消耗以及性能影响,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-02-02
  • Java多线程和并发基础面试题(问答形式)

    Java多线程和并发基础面试题(问答形式)

    多线程和并发问题是Java技术面试中面试官比较喜欢问的问题之一。在这里,从面试的角度列出了大部分重要的问题,感兴趣的小伙伴们可以参考一下
    2016-06-06
  • java byte数组与int,long,short,byte的转换实现方法

    java byte数组与int,long,short,byte的转换实现方法

    下面小编就为大家带来一篇java byte数组与int,long,short,byte的转换实现方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-10-10
  • java如何读取io流生成xls

    java如何读取io流生成xls

    通过使用Apache POI库,可以在Java环境中处理Excel文件,本示例展示如何创建一个WorkBook,其中包含老师和学生的信息,并通过控制台进行数据的添加和检索,首先,创建一个Excel工作簿,设置所需的列标题,然后接收用户通过控制台输入的数据
    2024-11-11

最新评论