Jasypt组件整合踩坑记录

背景介绍

甲方要求所有配置的敏感信息需要加密,不能暴露在外。因此选择了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=)
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

友情链接更多精彩内容