SpringBoot实战:jasypt实现配置文件信息加密

引言

对于单体项目而言,在未使用 SpringCloud 框架的情况下,配置文件中包含着大量的敏感信息,例如数据库账号密码,API服务密钥等,这些信息一旦泄露,将可能对企业的资产造成重大威胁,因此,对于配置文件中的敏感信息进行加密是一项重要的措施。


Jasypt支持多种加密算法,如DES、AES、Blowfish等,以及基于口令的加密算法(PBE)。它还提供了灵活的配置选项,允许开发人员自定义加密算法、密码、初始化向量等。


特点:

  • 简单易用:jasypt 凭借着其直观的API和注解功能,极大地简化了在应用程序中集成与使用jasypt的过程,使得开发者能够轻松实现敏感信息的加密保护。

  • 安全性高:jasypt采用先进的强加密算法,为配置文件中的敏感信息提供监视的保护屏障,有效抵御数据泄露和未授权访问的风险。

  • 兼容性:jasypt展现出了卓越的兼容性,能够无缝集成到各种java 应用程序和框架中,包括但不限于spring Spring Boot、Hibernate等,为不同环境的开发者提供一致且高效的安全的解决方案。


一、代码示例

在项目的pom.xml文件引入相关依赖:

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

配置Jasypt

jasypt:
  encryptor:
    algorithm: PBEWITHHMACSHA512ANDAES_256
    iv-generator-classname: org.jasypt.iv.RandomIvGenerator
    password: secret_key # 这里的秘钥一般不会写在配置文件中,为了方便理解暂时放在这里
    property:
      prefix: ENC(
      suffix: )
  • algorithm: jasypt的加密算法,这里指定加密算法为一种结合了SHA-512 HMAC和AES-256加密算法的强加密算法。

  • iv-generator-classname: 指定用于生成初始化向量的类。RandomIvGenerator是一个随机生成初始化向量的生成器,它适用于需要初始化向量的加密算法,如AES。每次加密时,它都会生成一个新的随机初始化向量,增加了解密的难度。

  • password: 指定用于加密和解密的密码。

  • property.prefix: 指定加密值的前缀。当Jasypt处理配置文件时,它会查找以这个前缀开始的属性值,并尝试使用配置的加密算法进行解密。默认值是ENC(,也可以进行修改。

  • property.suffix: 指定加密值的后缀。与prefix类似,Jasypt会查找以这个后缀结束的属性值进行解密。默认值是)。

加密配置文件信息:

示例中我们加密的信息是数据库的 url、username、password 这三个属性。

spring:
  application:
    name: server
  datasource:
    url: jdbc:mysql://localhost:3306/study_db?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&serverTimezone=Asia/Shanghai
    driver-class-name: com.mysql.cj.jdbc.Driver
    username: root
    password: 123456

官方文档:https://github.com/ulisesbocchio/jasypt-spring-boot#maven-plugin

添加Maven 插件
<build>
        <plugins>
            <plugin>
                <groupId>com.github.ulisesbocchio</groupId>
                <artifactId>jasypt-maven-plugin</artifactId>
                <version>3.0.5</version>
                <configuration>
                    <path>file:src/main/resources/application.yaml</path>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>
修改配置文件
spring:
  application:
    name: server
  datasource:
    url: ENC(jdbc:mysql://localhost:3306/study_db?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&serverTimezone=Asia/Shanghai)
    driver-class-name: com.mysql.cj.jdbc.Driver
    username: ENC(root)
    password: ENC(123456)
jasypt:
  encryptor:
    algorithm: PBEWITHHMACSHA512ANDAES_256
    iv-generator-classname: org.jasypt.iv.RandomIvGenerator
    property:
      prefix: ENC(
      suffix: )
运行如下maven命令:

SpringBoot实战:jasypt实现配置文件信息加密

mvn jasypt:encrypt -Djasypt.encryptor.password=secret_key

SpringBoot实战:jasypt实现配置文件信息加密

运行jar包
java -jar xxx.jar --jasypt.encryptor.password=secret_key

SpringBoot实战:jasypt实现配置文件信息加密



原文始发于微信公众号(Java技术前沿):SpringBoot实战:jasypt实现配置文件信息加密

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/299762.html

(0)
小半的头像小半

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!