springboot使用jasypt加密庫(kù)實(shí)現(xiàn)數(shù)據(jù)庫(kù)加解密示例代碼
一、背景說(shuō)明
在服務(wù)中不可避免的需要使用到一些秘鑰(數(shù)據(jù)庫(kù)、redis等)開(kāi)發(fā)和測(cè)試環(huán)境還好,但生產(chǎn)如果采用明文配置將會(huì)有安全問(wèn)題,jasypt是一個(gè)通用的加解密庫(kù),可以使用它。
jasypt默認(rèn)使用StringEncryptor來(lái)進(jìn)行加解密,也可以自定義自己的加解密類(lèi)來(lái)替換它 。
二、Jasypt介紹
2.1 Jasypt是什么?
Jasypt是一個(gè)Java庫(kù),Java 加密包,用于加密和解密敏感數(shù)據(jù),例如密碼和API密鑰。
它允許開(kāi)發(fā)者以最小的努力為他/她的項(xiàng)目添加基本的加密功能,而且不需要對(duì)密碼學(xué)的工作原理有深刻的了解。
使用Jasypt對(duì)密碼進(jìn)行加解密可以保證密碼的安全性。
2.2 Jasypt的功能特性
- 高安全性、基于標(biāo)準(zhǔn)的加密技術(shù),既可用于單向加密也可用于雙向加密。
- 加密密碼、文本、數(shù)字、二進(jìn)制文件…與Hibernate的透明集成。
- 適合集成到基于Spring的應(yīng)用程序中,也可與Spring Security透明地集成。
- 對(duì)應(yīng)用程序的配置(即數(shù)據(jù)源)進(jìn)行加密的綜合能力。
- 在多處理器/多核系統(tǒng)中具有高性能加密的特殊功能。
- 開(kāi)放的API,可與任何JCE供應(yīng)商一起使用。
- 提供了一組內(nèi)置的加密和解密算法,用于保護(hù)敏感數(shù)據(jù)。
- 其中包括使用對(duì)稱(chēng)加密算法(如AES和Blowfish)和非對(duì)稱(chēng)加密算法(如RSA)進(jìn)行加密和解密。
三、示例1:在Spring Boot中使用Jasypt加密和解密敏感數(shù)據(jù)
- 在Spring Boot中使用Jasypt加密和解密敏感數(shù)據(jù)非常簡(jiǎn)單。
- 您只需要在Spring Boot應(yīng)用程序中添加Jasypt依賴(lài)項(xiàng),并在應(yīng)用程序配置文件中指定加密和解密密鑰即可。
以下是在Spring Boot應(yīng)用程序中使用Jasypt加密和解密密碼的示例代碼:
3.1 添加Jasypt依賴(lài)項(xiàng)
<dependency> <groupId>com.github.ulisesbocchio</groupId> <artifactId>jasypt-spring-boot-starter</artifactId> <version>2.1.0</version> </dependency>
3.2 配置加密和解密密鑰
在應(yīng)用程序配置文件(例如application.properties或application.yml)中指定加密和解密密鑰。
例如:
jasypt.encryptor.password=mySecretKey
3.3 在應(yīng)用程序中使用加密和解密功能
在應(yīng)用程序中使用Jasypt加密和解密密碼非常簡(jiǎn)單。
您只需要使用@Autowired注釋注入org.jasypt.encryption.StringEncryptor bean,
并使用encrypt和decrypt方法加密和解密密碼。
例如:
/** * 對(duì)數(shù)據(jù)庫(kù)進(jìn)行加密 * * @param passWord * @return */ @GetMapping("/encrypt") public String jasyptEncrypt(String passWord) { StandardPBEStringEncryptor standardPBEStringEncryptor = new StandardPBEStringEncryptor(); EnvironmentPBEConfig config = new EnvironmentPBEConfig(); config.setAlgorithm("PBEWithMD5AndDES"); // 加密的算法,這個(gè)算法是默認(rèn)的 config.setPassword("SDHYDZ"); // 加密的密鑰,隨便自己填寫(xiě),很重要千萬(wàn)不要告訴別人 standardPBEStringEncryptor.setConfig(config); String encryptedText = standardPBEStringEncryptor.encrypt(passWord); return encryptedText; } /** * 對(duì)數(shù)據(jù)庫(kù)進(jìn)行解密 * * @param passWord * @return */ @GetMapping("/decrypt") public String jasyptDecrypt(String passWord) { StandardPBEStringEncryptor standardPBEStringEncryptor = new StandardPBEStringEncryptor(); EnvironmentPBEConfig config = new EnvironmentPBEConfig(); config.setAlgorithm("PBEWithMD5AndDES"); config.setPassword("SDHYDZ"); standardPBEStringEncryptor.setConfig(config); String plainText = standardPBEStringEncryptor.decrypt(passWord); return plainText; }
四、示例2:在Spring Boot中使用Jasypt加解密密碼的步驟
以下是在Spring Boot中使用Jasypt加解密密碼的步驟:
4.1 在pom.xml文件中添加依賴(lài)
<dependency> <groupId>com.github.ulisesbocchio</groupId> <artifactId>jasypt-spring-boot-starter</artifactId> <version>2.1.0</version> </dependency>
4.2 在application.properties或application.yml中配置加密算法和密鑰:
jasypt.encryptor.algorithm=PBEWithMD5AndDES jasypt.encryptor.password=your_secret_password
或者:
jasypt: encryptor: algorithm: PBEWithMD5AndDES #加密算法,不配置使用默認(rèn)的 password: your_secret_password #加密秘鑰
在配置文件中配置秘鑰仍可能存在密碼泄露的可能,因此我將秘鑰放在項(xiàng)目啟動(dòng)是加載的:
@SpringBootApplication public class HyErpApplication { public static void main(String[] args) throws UnknownHostException { System.setProperty("jasypt.encryptor.password",SecHelper.decryptStr("6qNfbL8HgFdyj7IZyysdzTWf")); ConfigurableApplicationContext application = SpringApplication.run(HyErpApplication.class, args); } }
4.3 在application.properties或application.yml中使用加密后的密碼:
spring.datasource.password=ENC(encrypted_password)
或者:
spring: datasource: password: ENC(encrypted_password)
總結(jié)
到此這篇關(guān)于springboot使用jasypt加密庫(kù)實(shí)現(xiàn)數(shù)據(jù)庫(kù)加解密的文章就介紹到這了,更多相關(guān)springboot數(shù)據(jù)庫(kù)加解密內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
MyBatis-Ext快速入門(mén)實(shí)戰(zhàn)
MyBatis-Ext是MyBatis的增強(qiáng)擴(kuò)展,和我們平常用的Mybatis-plus非常類(lèi)似,本文主要介紹了MyBatis-Ext快速入門(mén)實(shí)戰(zhàn),感興趣的可以了解一下2021-10-10java字符串切割實(shí)例學(xué)習(xí)(獲取文件名)
在Java中處理一些路徑相關(guān)的問(wèn)題的時(shí)候,如要取出ie瀏覽器上傳文件的文件名,由于ie會(huì)把整個(gè)文件路徑都作為文件名上傳,需要用java.lang.String中的replaceAll或者split來(lái)處理,下面看看使用方法2013-12-12Java編程實(shí)現(xiàn)對(duì)十六進(jìn)制字符串異或運(yùn)算代碼示例
這篇文章主要介紹了Java編程實(shí)現(xiàn)對(duì)十六進(jìn)制字符串異或運(yùn)算代碼示例,簡(jiǎn)述了異或運(yùn)算以及具體實(shí)例,具有一定借鑒價(jià)值,需要的朋友可以參考下。2017-12-12Java吃貨聯(lián)盟訂餐系統(tǒng)代碼實(shí)例
這篇文章主要介紹了Java訂餐系統(tǒng),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-04-04詳解Java類(lèi)動(dòng)態(tài)加載和熱替換
本文主要介紹類(lèi)加載器、自定義類(lèi)加載器及類(lèi)的加載和卸載等內(nèi)容,并舉例介紹了Java類(lèi)的熱替換。2021-05-05