背景介绍
甲方要求所有配置的敏感信息需要加密,不能暴露在外。因此选择了Jasypt组件进行配置文件里面的参数加密。
Jasypt(Java Simplified Encryption)是一个Java库,用于简化加密操作。它提供了一种简单的方式来在Java应用程序中执行加密和解密操作,而无需处理复杂的加密算法和细节。
引入依赖
<!--配置加密-->
<dependency>
<groupId>com.github.ulisesbocchio</groupId>
<artifactId>jasypt-spring-boot</artifactId>
<version>3.0.5</version>
</dependency>
这里遇到了第一个坑,可引入的依赖有jasypt-spring-boot-starter或jasypt-spring-boot
查询资料大家引入的都是jasypt-spring-boot-starter。但是项目引入jasypt-spring-boot-starter无法启动报如下错误:
Could not initialize Logback logging from classpath:logback-spring.xml
怀疑依赖冲突,暂时排查完不知道问题在哪。使用jasypt-spring-boot正常启动。
jasypt-spring-boot-starter 和 jasypt-spring-boot 都是为了在Spring Boot应用程序中集成Jasypt而提供的工具。它们的区别在于:
功能差异:
jasypt-spring-boot-starter 是一个Spring Boot Starter,它旨在通过将Jasypt整合到Spring Boot应用程序中,简化加密配置的过程。它允许您通过Spring Boot的属性文件来配置加密所需的各种属性,如加密算法、密钥等。
jasypt-spring-boot 是一个Spring Boot自动配置模块,它提供了对Jasypt加密的支持,但不是Spring Boot Starter。您需要手动添加它作为依赖项,并且需要手动配置Jasypt相关的属性。
依赖管理:
由于 jasypt-spring-boot-starter 是一个Spring Boot Starter,它遵循Spring Boot的自动配置机制,因此您只需将其添加到您的项目依赖中即可,Spring Boot将自动配置Jasypt。
而 jasypt-spring-boot 则需要手动添加到您的项目依赖中,并且需要手动配置。
易用性:
由于 jasypt-spring-boot-starter 遵循Spring Boot的约定优于配置原则,因此它更容易使用和配置。您可以直接在Spring Boot的属性文件中添加Jasypt的配置属性,并且Spring Boot会自动处理加密和解密。
对于 jasypt-spring-boot,您需要手动配置Jasypt相关的属性,这可能会增加配置的复杂性和错误的可能性。
增加Jasypt配置
jasypt:
encryptor:
# 加密盐
password: 123456
# 加密算法
algorithm: PBEWithMD5AndDES
# 注意此配置不配会报加密和解密密码不一致
iv-generator-classname: org.jasypt.iv.NoIvGenerator
参考配置说明如下:
jasypt:
encryptor:
#自定义 加密因子。随便写
password: ALK9382LDF234UIJ79GJ0F5HD
# 官方默认的加密算法是 PBEWITHHMACSHA512ANDAES_256 但是如果用的是jdk1.8 不支持需要改成 PBEWithMD5AndDES
algorithm: PBEWithMD5AndDES
# 配置格式(不写默认ENC)
property:
prefix: "ENC["
suffix: "]"
这里遇到了第二个坑就是不配置
iv-generator-classname: org.jasypt.iv.NoIvGenerator
项目启动正常但是报加密密码和解密密码不一致。
启动文件增加开关
spring boot 启动类中增加属性自动解密的开关。
@EnableEncryptableProperties
生成密文
input:需要加密的字段
password:加密盐值,用来进行加密
algorithm:加密方式,默认不写也行
命令:
java -cp jasypt-1.9.3.jar org.jasypt.intf.cli.JasyptPBEStringEncryptionCLI input=“root” password=hello algorithm=PBEWithMD5AndDES
输出如下:
----ENVIRONMENT-----------------
Runtime: Oracle Corporation Java HotSpot™ 64-Bit Server VM 25.171-b11
----ARGUMENTS-------------------
algorithm: PBEWithMD5AndDES
input: root
password: hello
----OUTPUT----------------------
muiQcX1aXcMACgnq57hDDA==
配置文件使用密文
修改nacos配置
spring:
datasource:
druid:
datasource:
master:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://127.0.0.1:3306/test?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
username: ENC(muiQcX1aXcMACgnq57hDDA==)
password: ENC(sxEwCbBiaY1JNBUjr8RHKgdqB6ET9avktVNsvSe4Pa4=)