springboot配置文件中敏感數(shù)據(jù)(賬號(hào)密碼)加密方式
背景
原本項(xiàng)目中數(shù)據(jù)庫和中間件賬號(hào)密碼都是直接用明文配置的,畢竟這樣最方便開發(fā),平時(shí)也沒人在乎這個(gè)。
但是部署到實(shí)際項(xiàng)目中,甲方進(jìn)行安全檢查第一個(gè)就查到這個(gè),要求我們整改,那只能整了。
網(wǎng)上找了一些資料,好像大都用Jasypt加密工具操作,Jasypt官網(wǎng)看其他博客看了下,發(fā)現(xiàn)使用起來比較方便,直接簡(jiǎn)單記錄下,
擴(kuò)展:
直接預(yù)研敏感數(shù)據(jù)加密技術(shù),不只是對(duì)配置文件加密,對(duì)其他接口經(jīng)過后臺(tái)的敏感數(shù)據(jù)也進(jìn)行了解,包括數(shù)據(jù)加密、加密后的技術(shù)怎么進(jìn)行模糊查詢等等,會(huì)在后續(xù)博客中進(jìn)行編寫。
當(dāng)然這都是后話,下面直接操作Jasypt進(jìn)行配置文件賬號(hào)密碼加密。
實(shí)踐Jasypt
1、引入依賴
<!-- https://mvnrepository.com/artifact/com.github.ulisesbocchio/jasypt-spring-boot-starter -->
<dependency>
<groupId>com.github.ulisesbocchio</groupId>
<artifactId>jasypt-spring-boot-starter</artifactId>
<version>3.0.5</version>
</dependency>
如果項(xiàng)目中啟動(dòng)類沒有 @SpringBootApplication或@EnableAutoConfiguration注解,
那么需要引入jasypt-spring-boot依賴且需要?jiǎng)?chuàng)建配置類
并啟用 @Configuration和@EnableEncryptableProperties,進(jìn)行聲明。
2、賬號(hào)密碼轉(zhuǎn)成加密值
創(chuàng)建一個(gè)工具類把我們的賬號(hào)密碼進(jìn)行加密
import org.jasypt.properties.PropertyValueEncryptionUtils;
import org.jasypt.util.text.BasicTextEncryptor;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
* Jasypt加密工具類
* @author ppp
* @date 2023/1/5
*/
public class JasyptUtil {
private static final Logger logger = LoggerFactory.getLogger(JasyptUtil.class);
/**
* 加密使用密鑰,需要在和配置文件中的jasypt.encryptor.password保持一致
*/
private static final String PRIVATE_KEY = "demo";
/**
* BasicTextEncryptor對(duì)象初始化使用的算法就是"PBEWithMD5AndDES"
* 點(diǎn)擊進(jìn)源碼構(gòu)造方法中就可以看到下面的設(shè)置
* this.encryptor.setAlgorithm("PBEWithMD5AndDES");
*/
private static BasicTextEncryptor basicTextEncryptor = new BasicTextEncryptor();
static {
basicTextEncryptor.setPassword(PRIVATE_KEY);
}
/**
* 明文加密
*
* @param plaintext 明文
* @return String
*/
public static String encrypt(String plaintext) {
logger.info("明文字符串為:{}", plaintext);
String ciphertext = basicTextEncryptor.encrypt(plaintext);
logger.info("密文字符串為:{}", ciphertext);
return ciphertext;
}
/**
* 解密
*
* @param ciphertext 密文
* @return String
*/
public static String decrypt(String ciphertext) {
logger.info("密文字符串為:{}", ciphertext);
ciphertext = "ENC(" + ciphertext + ")";
if (PropertyValueEncryptionUtils.isEncryptedValue(ciphertext)) {
String plaintext = PropertyValueEncryptionUtils.decrypt(ciphertext, basicTextEncryptor);
logger.info("明文字符串為:{}", plaintext);
return plaintext;
}
logger.error("解密失敗!");
return "";
}
public static void main(String[] args) {
String encrypt = encrypt("123456");
String test = decrypt(encrypt);
}
}
3、配置文件添加配置
application.yml中添加配置
jasypt:
encryptor:
# 指定加密密鑰,生產(chǎn)環(huán)境請(qǐng)放到啟動(dòng)參數(shù)里面 -Djasypt.encryptor.password=加密密鑰
password: demo
# 指定解密算法,需要和加密時(shí)使用的算法一致
algorithm: PBEWithMD5AndDES
# 指定initialization vector類型
iv-generator-classname: org.jasypt.iv.NoIvGenerator
4、替換賬號(hào)密碼
把a(bǔ)pplication.yml中需要加密的賬號(hào)密碼都換成 ENC(密文) 格式即可
啟用項(xiàng)目后他會(huì)檢測(cè)配置文件中ENC樣式的數(shù)據(jù)把里面的密文解密出來給框架使用。
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Java實(shí)現(xiàn)富文本轉(zhuǎn)markdown
這篇文章主要為大家詳細(xì)介紹了如何通過Java實(shí)現(xiàn)富文本轉(zhuǎn)markdown功能,文中的示例代碼講解詳細(xì),具有一定的借鑒價(jià)值,有需要的小伙伴可以參考下2023-12-12
Java的微信開發(fā)中使用XML格式和JSON格式數(shù)據(jù)的示例
這篇文章主要介紹了Java微信開發(fā)中使用XML格式和JSON格式數(shù)據(jù)的示例,注意一下json-lib所需要的jar包,需要的朋友可以參考下2016-02-02
Java解析zip文件,并識(shí)別壓縮包里面的文件轉(zhuǎn)換成可操作的IO流方式
這篇文章主要介紹了Java解析zip文件,并識(shí)別壓縮包里面的文件轉(zhuǎn)換成可操作的IO流方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-08-08
SpringBoot項(xiàng)目修改訪問端口和訪問路徑的方法
這篇文章主要介紹了SpringBoot項(xiàng)目修改訪問端口和訪問路徑的方法,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2018-12-12
IDEA在創(chuàng)建包時(shí)如何把包分開實(shí)現(xiàn)自動(dòng)分層(方法詳解)
這篇文章主要介紹了IDEA在創(chuàng)建包時(shí)如何把包分開實(shí)現(xiàn)自動(dòng)分層,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-09-09
Java連接Emqx實(shí)現(xiàn)訂閱發(fā)布消息的步驟記錄
這篇文章主要介紹了Java連接Emqx實(shí)現(xiàn)訂閱發(fā)布消息的步驟記錄,EMQX是大規(guī)模分布式MQTT消息服務(wù)器,可以高效可靠連接海量物聯(lián)網(wǎng)設(shè)備,實(shí)時(shí)處理分發(fā)消息與事件流數(shù)據(jù),助力構(gòu)建關(guān)鍵業(yè)務(wù)的物聯(lián)網(wǎng)與云應(yīng)用,需要的朋友可以參考下2025-09-09

