JAVA(SpringBoot)集成Jasypt進行加密、解密功能
一、Jasypt 簡介
1、Jasypt 是一個 Java 庫,用于簡化加密和解密任務(wù)。它提供了方便的 API,可以輕松地對字符串進行加密,并在需要時進行解密。
2、保護敏感配置信息:在配置文件中存儲敏感信息時,使用加密可以防止這些信息被未經(jīng)授權(quán)的人員訪問。
3、靈活的加密方式:Jasypt 支持多種加密算法和配置選項,可以根據(jù)具體需求進行定制。
4、與 Spring Boot 集成方便:可以通過簡單的配置將 Jasypt 集成到 Spring Boot 應(yīng)用中,無需大量的額外代碼。
二、Jasypt功能
(1)、加密和解密
字符串加密:
可以對敏感的字符串信息進行加密,如數(shù)據(jù)庫密碼、API 密鑰、用戶密碼等。通過指定加密算法和密鑰,可以將明文轉(zhuǎn)換為密文,保護敏感信息不被輕易獲取。例如,可以使用 Jasypt 加密數(shù)據(jù)庫連接密碼,然后在應(yīng)用程序中使用加密后的密碼進行數(shù)據(jù)庫連接,確保密碼的安全性。
(2)、密鑰管理
密鑰生成:
Jasypt 可以生成加密密鑰,確保密鑰的隨機性和安全性。密鑰的生成可以基于不同的算法和參數(shù),以滿足不同的安全需求。
密鑰存儲和檢索:
Jasypt 提供了多種方式來存儲和檢索加密密鑰??梢詫⒚荑€存儲在環(huán)境變量、配置文件、數(shù)據(jù)庫或其他安全存儲中。在應(yīng)用程序中,可以通過指定密鑰存儲的位置和方式來獲取加密密鑰。
(3)、加密算法支持
多種加密算法:
Jasypt 支持多種加密算法,如 AES、DES、RSA 等。可以根據(jù)不同的安全需求選擇合適的加密算法。
算法參數(shù)配置:
Jasypt 允許對加密算法的參數(shù)進行配置,如密鑰長度、迭代次數(shù)、鹽值等。這些參數(shù)可以根據(jù)具體的安全需求進行調(diào)整,以提高加密的強度。
(4)、集成和擴展性
與框架集成:
Jasypt 可以與各種 Java 框架集成,如 Spring、Spring Boot、Hibernate 等??梢栽谶@些框架中使用 Jasypt 進行加密和解密操作,保護框架配置文件和敏感信息。
自定義加密器:
Jasypt 提供了自定義加密器的接口,可以根據(jù)特定的需求實現(xiàn)自己的加密算法和邏輯。這使得 Jasypt 具有很高的擴展性,可以滿足不同應(yīng)用場景的加密需求。
三、依賴配置
<dependency>
<groupId>com.github.ulisesbocchio</groupId>
<artifactId>jasypt-spring-boot-starter</artifactId>
<version>3.0.2</version>
</dependency>四、配置Jasypt
#配置文件加密
jasypt:
encryptor:
# 秘鑰(用于加密和解密的密碼,需妥善保管,確保安全性)
# 這里的秘鑰一般不會寫在配置文件中,為了方便理解暫時放在這里
password: GrZGCCeUwLJ
# 指定加密算法為基于密碼的加密,結(jié)合了 HMAC-SHA512 和 AES-256,提供較強的加密強度
algorithm: PBEWITHHMACSHA512ANDAES_256
# 在生成加密密鑰時的迭代次數(shù),更多的迭代次數(shù)通常會增加密鑰的安全性,但也會增加計算時間
key-obtention-iterations: 100
# 資源池的大小相關(guān)
pool-size: 1
# 指定用于生成初始化向量(IV)的類為隨機初始化向量生成器,增加加密安全性
iv-generator-classname: org.jasypt.iv.RandomIvGenerator
# 指定用于生成鹽(salt)的類為隨機鹽生成器,增加加密安全性
salt-generator-classname: org.jasypt.salt.RandomSaltGenerator
# 指定加密后的字符串輸出格式為 Base64 編碼,方便存儲和傳輸
string-output-type: base64
property:
# 加密屬性值的前綴,用于標識加密的屬性
prefix: TEST(
# 加密屬性值的后綴,用于標識加密的屬性
suffix: ) 五、方案示例
(1)、創(chuàng)建SpringBootConfigEncrypt 實現(xiàn) CommandLineRunner接口 項目啟動時執(zhí)行加密測試
import org.jasypt.encryption.StringEncryptor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.CommandLineRunner;
import org.springframework.context.ApplicationContext;
import org.springframework.core.env.Environment;
import org.springframework.stereotype.Component;
@Component
public class SpringBootConfigEncrypt implements CommandLineRunner {
@Autowired
private ApplicationContext applicationContext;
/**
* 自動注入 Jasypt 的字符串加密器,用于加密和解密操作。
*/
@Autowired
private StringEncryptor encryptor;
@Override
public void run(String... args) throws Exception {
Environment environment = applicationContext.getBean(Environment.class);
// 獲取配置文件中數(shù)據(jù)庫用戶名和密碼的原始明文。
String oldUserName = environment.getProperty("spring.datasource.druid.test.username");
String oldPassword = environment.getProperty("spring.datasource.druid.test.password");
// 對用戶名和密碼進行加密。
String encryptUserName = encrypt(oldUserName);
String encryptPassword = encrypt(oldPassword);
// 打印加密前后的結(jié)果對比
System.out.println("MySQL原始明文密碼為:" + oldUserName);
System.out.println("MySQL原始明文密碼為:" + oldPassword);
System.out.println("*********************************************");
System.out.println("MySQL原始明文密碼加密后的結(jié)果為:" + encryptUserName);
System.out.println("MySQL原始明文密碼加密后的結(jié)果為:" + encryptPassword);
}
/**
* 使用加密器對給定的字符串進行加密。
*
* @param originPassord 待加密的原始密碼。
* @return 加密后的字符串。
*/
private String encrypt(String originPassord) {
return encryptor.encrypt(originPassord);
}
/**
* 使用加密器對給定的加密字符串進行解密。
*
* @param encryptedPassword 待解密的加密密碼。
* @return 解密后的字符串。
*/
private String decrypt(String encryptedPassword) {
return encryptor.decrypt(encryptedPassword);
}
}(2)、運行項目,控制臺打?。?/h3>

(3)、將配置文件中的明文替換為加密后的

更換完成之后,重新啟動項目如果重啟成功則加密完成。
(4)、TEST()介紹
這里的 “TEST” 有何特殊含義呢?實際上,使用 “TEST()” 來包裹加密密鑰是一種約定俗成的表示方式。這樣做的目的是為了明確標識出被加密的內(nèi)容,使得在讀取和處理配置文件時能夠更容易地識別出加密字段。“TEST” 本身并沒有特定的硬性規(guī)定的含義,它只是作為一種標記,讓系統(tǒng)知道其中的內(nèi)容是經(jīng)過加密處理的。
如果想要自定義前后綴標記,比如將其換成 “ENCRYPT()” 來標記加密字段,此時只需要在配置文件中進行如下配置即可:
4.1修改 jasypt.encryptor.property.prefix 屬性

4.2 修改數(shù)據(jù)庫配置 username、password屬性

以上第一種方案就算完成了。
注意密鑰不要寫在配置文件中上述方式仍存在加密密鑰泄露的風(fēng)險,可以將密鑰從配置文件中移除,使用以下三種方式:
方式一:直接以程序啟動時的命令行參數(shù)形式帶入。
示例:java -jar app.jar --jasypt.encryptor.password=ENCRYPT。
方式二:直接以程序啟動時的應(yīng)用環(huán)境變量形式帶入。
示例:java -Djasypt.encryptor.password=ENCRYPT-jar app.jar。
方式三:作為系統(tǒng)環(huán)境變量的方式來帶入
1.打開全局配置文件: sudo vim /etc/profile
2.編輯全局配置文件: export JASYPT_ENCRYPT_PASSWORD=ENCRYPT
3.重載profile配置文件: source /etc/profile
4.修改jasypt.encryptor.password屬性
jasypt:
encryptor:
password: ${JASYPT_ENCRYPT_PASSWORD}到此這篇關(guān)于JAVA(SpringBoot)集成Jasypt進行加密、解密功能的文章就介紹到這了,更多相關(guān)SpringBoot Jasypt加密、解密內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
基于Restful接口調(diào)用方法總結(jié)(超詳細)
下面小編就為大家?guī)硪黄赗estful接口調(diào)用方法總結(jié)(超詳細)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-08-08
Spring?Boot中優(yōu)雅地處理參數(shù)傳遞的技巧分享
最近一直在學(xué)習(xí)Spring Boot,今天將其中的從前臺過來的參數(shù)傳遞總結(jié)一下,下面這篇文章主要給大家介紹了關(guān)于Spring?Boot中優(yōu)雅地處理參數(shù)傳遞的技巧,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下2023-05-05
mybatis plus saveBatch方法方法執(zhí)行慢導(dǎo)致接口發(fā)送慢解決分析
這篇文章主要為大家介紹了mybatis plus saveBatch方法導(dǎo)致接口發(fā)送慢解決分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-10-10
Flask接口如何返回JSON格式數(shù)據(jù)自動解析
這篇文章主要介紹了Flask接口如何返回JSON格式數(shù)據(jù)自動解析,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2020-11-11
sonar-scanner連接sonarquebe7的sonar.java.binaries問題的解決方案
今天小編就為大家分享一篇關(guān)于sonar-scanner連接sonarquebe7的sonar.java.binaries問題的解決方案,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧2018-12-12

