Spring Boot 3 集成 Jasypt詳解,你學(xué)會(huì)了嗎?
隨著信息安全的日益受到重視,加密敏感數(shù)據(jù)在應(yīng)用程序中變得越來(lái)越重要。Jasypt(Java Simplified Encryption)作為一個(gè)簡(jiǎn)化Java應(yīng)用程序中數(shù)據(jù)加密的工具,為開(kāi)發(fā)者提供了一種便捷而靈活的加密解決方案。本文將深入解析Jasypt的工作原理,以及如何在Spring Boot項(xiàng)目中集成和使用Jasypt來(lái)保護(hù)敏感信息。
Jasypt簡(jiǎn)介
Jasypt(Java Simplified Encryption)是一個(gè)專注于簡(jiǎn)化Java加密操作的工具。它提供了一種簡(jiǎn)單而強(qiáng)大的方式來(lái)處理數(shù)據(jù)的加密和解密,使開(kāi)發(fā)者能夠輕松地保護(hù)應(yīng)用程序中的敏感信息,如數(shù)據(jù)庫(kù)密碼、API密鑰等。
Jasypt的設(shè)計(jì)理念是簡(jiǎn)化加密操作,使其對(duì)開(kāi)發(fā)者更加友好。它采用密碼學(xué)強(qiáng)度的加密算法,支持多種加密算法,從而平衡了性能和安全性。其中,Jasypt的核心思想之一是基于密碼的加密(Password Based Encryption,PBE),通過(guò)用戶提供的密碼生成加密密鑰,然后使用該密鑰對(duì)數(shù)據(jù)進(jìn)行加密和解密。
該工具還引入了鹽(Salt)的概念,通過(guò)添加隨機(jī)生成的鹽值,提高了加密的安全性,防止相同的原始數(shù)據(jù)在不同的加密過(guò)程中產(chǎn)生相同的結(jié)果,有效抵御彩虹表攻擊。
Jasypt與Spring Boot天然契合,可以輕松集成到Spring Boot項(xiàng)目中,為開(kāi)發(fā)者提供了更便捷的數(shù)據(jù)安全解決方案。通過(guò)Jasypt,開(kāi)發(fā)者可以在不深入了解底層加密算法的情況下,輕松實(shí)現(xiàn)數(shù)據(jù)的安全保護(hù),使得應(yīng)用程序更加可靠和安全。
官網(wǎng)地址: http://www.jasypt.org/
github地址: https://github.com/ulisesbocchio/jasypt-spring-boot
Spring Boot 3 集成 Jasypt
添加依賴
在pom文件中添加一下依賴
<dependency>
<groupId>com.github.ulisesbocchio</groupId>
<artifactId>jasypt-spring-boot</artifactId>
<version>3.0.5</version>
</dependency>
添加配置文件
未指定前后綴的話默認(rèn)格式ENC()括號(hào)里面是加密后的密文 然后實(shí)現(xiàn)自動(dòng)解密
spring:
# 數(shù)據(jù)源配置
datasource:
type: com.alibaba.druid.pool.DruidDataSource
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://192.168.10.106:3306/xj_doc?characterEncoding=utf8&serverTimeznotallow=Asia/Shanghai
username: root
password: ENC(BLC3UQBxshlcA9tnMyJL7w==)
# 加密配置
jasypt:
encryptor:
# 指定加密密鑰,生產(chǎn)環(huán)境請(qǐng)放到啟動(dòng)參數(shù)里面
password: 0f7b0a5d-46bc-40fd-b8ed-3181d21d644f
# 指定解密算法,需要和加密時(shí)使用的算法一致
algorithm: PBEWithMD5AndDES
iv-generator-classname: org.jasypt.iv.NoIvGenerator
# property:
# # 算法識(shí)別的前后綴,默認(rèn)ENC(),包含在前后綴的加密信息,會(huì)使用指定算法解密
# prefix: ENC@[
# suffix: ]
啟動(dòng)類(lèi)添加注解
在啟動(dòng)類(lèi)上添加注解@EnableEncryptableProperties注解來(lái)開(kāi)啟自動(dòng)解密
@SpringBootApplication
@MapperScan("cn.xj.xjdoc.**.mapper")
@EnableEncryptableProperties //開(kāi)啟自動(dòng)解密功能
public class XjdocApplication {
public static void main(String[] args) {
SpringApplication.run(XjdocApplication.class, args);
}
}
測(cè)試類(lèi)
public class JasyptUtil {
public static void main(String[] args){
StandardPBEStringEncryptor standardPBEStringEncryptor =new StandardPBEStringEncryptor();
/*配置文件中配置如下的算法*/
standardPBEStringEncryptor.setAlgorithm("PBEWithMD5AndDES");
/*配置文件中配置的password*/
standardPBEStringEncryptor.setPassword("0f7b0a5d-46bc-40fd-b8ed-3181d21d644f");
//加密
String jasyptPasswordEN =standardPBEStringEncryptor.encrypt("xj2022");
//解密
String jasyptPasswordDE =standardPBEStringEncryptor.decrypt(jasyptPasswordEN);
System.out.println("加密后密碼:"+jasyptPasswordEN);
System.out.println("解密后密碼:"+jasyptPasswordDE);
}
}
生產(chǎn)環(huán)境安全處理
jasypt的password值放在配置文件中在生產(chǎn)環(huán)境中是不安全的,我們可以將password值放到啟動(dòng)命令中,刪除配置文件中password 的配置行,啟動(dòng)命令如下所示:
java -Djasypt.encryptor.password=password -jar jasypt-spring-boot-demo-0.0.1-SNAPSHOT.jar
或者
java -jar jasypt-spring-boot-demo-0.0.1-SNAPSHOT.jar --jasypt.encryptor.password=password
總結(jié)
Jasypt作為一個(gè)簡(jiǎn)單而強(qiáng)大的加密工具,為Java應(yīng)用程序提供了便捷的數(shù)據(jù)保護(hù)方案。通過(guò)與Spring Boot的集成,開(kāi)發(fā)者可以在應(yīng)用程序中輕松地加密和解密敏感信息。在實(shí)際項(xiàng)目中,選擇合適的加密方式、安全存儲(chǔ)密碼以及與Spring Security等安全框架的集成,都是保障應(yīng)用程序安全的關(guān)鍵步驟。希望本文能夠幫助讀者更深入地了解Jasypt,并在實(shí)際項(xiàng)目中合理地運(yùn)用加密技術(shù)。