springboot使用jasypt加密庫(kù)實(shí)現(xiàn)數(shù)據(jù)庫(kù)加解密示例代碼
一、背景說(shuō)明
在服務(wù)中不可避免的需要使用到一些秘鑰(數(shù)據(jù)庫(kù)、redis等)開發(fā)和測(cè)試環(huán)境還好,但生產(chǎn)如果采用明文配置將會(huì)有安全問題,jasypt是一個(gè)通用的加解密庫(kù),可以使用它。
jasypt默認(rèn)使用StringEncryptor來(lái)進(jìn)行加解密,也可以自定義自己的加解密類來(lái)替換它 。
二、Jasypt介紹
2.1 Jasypt是什么?
Jasypt是一個(gè)Java庫(kù),Java 加密包,用于加密和解密敏感數(shù)據(jù),例如密碼和API密鑰。
它允許開發(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)中具有高性能加密的特殊功能。
- 開放的API,可與任何JCE供應(yīng)商一起使用。
- 提供了一組內(nèi)置的加密和解密算法,用于保護(hù)敏感數(shù)據(jù)。
- 其中包括使用對(duì)稱加密算法(如AES和Blowfish)和非對(duì)稱加密算法(如RSA)進(jìn)行加密和解密。
三、示例1:在Spring Boot中使用Jasypt加密和解密敏感數(shù)據(jù)
- 在Spring Boot中使用Jasypt加密和解密敏感數(shù)據(jù)非常簡(jiǎn)單。
- 您只需要在Spring Boot應(yīng)用程序中添加Jasypt依賴項(xiàng),并在應(yīng)用程序配置文件中指定加密和解密密鑰即可。
以下是在Spring Boot應(yīng)用程序中使用Jasypt加密和解密密碼的示例代碼:
3.1 添加Jasypt依賴項(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"); // 加密的密鑰,隨便自己填寫,很重要千萬(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文件中添加依賴
<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)文章
Java 并發(fā)編程學(xué)習(xí)筆記之核心理論基礎(chǔ)
編寫優(yōu)質(zhì)的并發(fā)代碼是一件難度極高的事情。Java語(yǔ)言從第一版本開始內(nèi)置了對(duì)多線程的支持,這一點(diǎn)在當(dāng)年是非常了不起的,但是當(dāng)我們對(duì)并發(fā)編程有了更深刻的認(rèn)識(shí)和更多的實(shí)踐后,實(shí)現(xiàn)并發(fā)編程就有了更多的方案和更好的選擇。本文是對(duì)并發(fā)編程的核心理論做了下小結(jié)2016-05-05
在Java中避免NullPointerException的解決方案
這篇文章主要介紹了在Java中避免NullPointerException的解決方案,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-04-04
spring中自動(dòng)注入注解的實(shí)現(xiàn)方式
在Spring框架中,AutowiredAnnotationBeanPostProcessor負(fù)責(zé)處理@Autowired和@Value注解,實(shí)現(xiàn)依賴注入,首先通過TypeMappedAnnotations獲取注解,并根據(jù)注解屬性構(gòu)建InjectionMetadata,存入緩存2024-09-09
RocketMQ生產(chǎn)者調(diào)用start發(fā)送消息原理示例
這篇文章主要為大家介紹了RocketMQ生產(chǎn)者調(diào)用start發(fā)送消息原理示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-11-11
SpringMVC如何把后臺(tái)文件打印到前臺(tái)
這篇文章主要介紹了SpringMVC如何把后臺(tái)文件打印到前臺(tái),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-09-09
springboot學(xué)習(xí)之Thymeleaf模板引擎及原理介紹
本文主要介紹一下SpringBoot給我們推薦的Thymeleaf模板引擎,這模板引擎呢,是一個(gè)高級(jí)語(yǔ)言的模板引擎,他的這個(gè)語(yǔ)法更簡(jiǎn)單而且功能更強(qiáng)大,對(duì)springboot?Thymeleaf模板引擎相關(guān)知識(shí)感興趣的朋友一起看看吧2022-02-02

