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: # 加密屬性值的前綴,用于標(biāo)識加密的屬性 prefix: TEST( # 加密屬性值的后綴,用于標(biāo)識加密的屬性 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()” 來包裹加密密鑰是一種約定俗成的表示方式。這樣做的目的是為了明確標(biāo)識出被加密的內(nèi)容,使得在讀取和處理配置文件時能夠更容易地識別出加密字段。“TEST” 本身并沒有特定的硬性規(guī)定的含義,它只是作為一種標(biāo)記,讓系統(tǒng)知道其中的內(nèi)容是經(jīng)過加密處理的。
如果想要自定義前后綴標(biāo)記,比如將其換成 “ENCRYPT()” 來標(biāo)記加密字段,此時只需要在配置文件中進行如下配置即可:
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)文章
SpringBoot整合Mybatis與druid實現(xiàn)流程詳解
這篇文章主要介紹了springboot整合mybatis plus與druid詳情,文章圍繞主題展開詳細的內(nèi)容介紹,具有一定的參考價值,需要的下伙伴可以參考一下2022-10-10Java中的日期時間類實例詳解(Date、Calendar、DateFormat)
在JDK1.0中,Date類是唯一的一個代表時間的類,但是由于Date類不便于實現(xiàn)國際化,所以從JDK1.1版本開始,推薦使用Calendar類進行時間和日期處理,這篇文章主要介紹了Java中的日期時間類詳解(Date、Calendar、DateFormat),需要的朋友可以參考下2023-11-11tomcat啟動完成執(zhí)行 某個方法 定時任務(wù)(Spring)操作
這篇文章主要介紹了tomcat啟動完成執(zhí)行 某個方法 定時任務(wù)(Spring)操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-09-09SpringDataJpa:JpaRepository增刪改查操作
這篇文章主要介紹了SpringDataJpa:JpaRepository增刪改查操作,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-08-08