引言
对于单体项目而言,在未使用 SpringCloud 框架的情况下,配置文件中包含着大量的敏感信息,例如数据库账号密码,API服务密钥等,这些信息一旦泄露,将可能对企业的资产造成重大威胁,因此,对于配置文件中的敏感信息进行加密是一项重要的措施。
Jasypt支持多种加密算法,如DES、AES、Blowfish等,以及基于口令的加密算法(PBE)。它还提供了灵活的配置选项,允许开发人员自定义加密算法、密码、初始化向量等。
特点:
-
简单易用:jasypt 凭借着其直观的API和注解功能,极大地简化了在应用程序中集成与使用jasypt的过程,使得开发者能够轻松实现敏感信息的加密保护。
-
安全性高:jasypt采用先进的强加密算法,为配置文件中的敏感信息提供监视的保护屏障,有效抵御数据泄露和未授权访问的风险。
-
兼容性:jasypt展现出了卓越的兼容性,能够无缝集成到各种java 应用程序和框架中,包括但不限于spring Spring Boot、Hibernate等,为不同环境的开发者提供一致且高效的安全的解决方案。
一、代码示例
<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命令:
mvn jasypt:encrypt -Djasypt.encryptor.password=secret_key
运行jar包
java -jar xxx.jar --jasypt.encryptor.password=secret_key
原文始发于微信公众号(Java技术前沿):SpringBoot实战:jasypt实现配置文件信息加密
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/299762.html