前言
最近項目組開始關注一些敏感資料的明文相關的事宜 , 其實這些東西也是都有非常成熟的解決方案。 既然最近着手去解決這些事情,那麼也順便給還未了解的大夥普及一下。
這個系列就暫短的分成三篇 :
yml配置檔案裡敏感資料的加密
第二篇 傳入資料敏感資料的加密存儲
javascript:void(0)
第三篇 使用mysql加解密函數輕松實作
Springboot 使用mysql加密解密函數 (資料加密篇 三)_默默不代表沉默-CSDN部落格
本篇是第一篇
正文
先看我們的實踐項目例子 :
我們目标是想對這些我們認為是敏感的資料加密,不能這麼明白的展現出來 。
1. pom檔案引入依賴:
<dependency>
<groupId>com.github.ulisesbocchio</groupId>
<artifactId>jasypt-spring-boot-starter</artifactId>
<version>2.1.0</version>
</dependency>
2.yml引入加密鑰匙配置 :
#jasypt加密的密匙
jasypt:
encryptor:
password: JCCCCgd6Tsjckd87xGy6H1JGb47G2H72
這裡注意,如果直接把加密password這樣擺在yml裡面,其實也是敏感的, 一會文章後面會介紹把這個當作啟動參數傳入。
3.開始事宜jasypt 加密 :
我們把需要加密的敏感資料拿出來,提前加密:
@Autowired
StringEncryptor encryptor;
@Test
void contextLoads() {
String dbUrl = encryptor.encrypt("jdbc:mysql://localhost:3306/mytest?useSSL=false&useUnicode=true&characterEncoding=UTF-8&serverTimezone=GMT%2B8&zeroDateTimeBehavior=convertToNull");
System.out.println(dbUrl);
String username = encryptor.encrypt("root");
System.out.println(username);
String password = encryptor.encrypt("root");
System.out.println(password);
}
可以拿到對應加密出來的資料 。
4.使用jasypt 的解析規則,把加密完後的資料替換配置到 yml檔案裡:
規則 ENC(加密資料)
5. 運作項目,調用查詢接口,看看是否能正常擷取資料庫資料,校驗相關敏感資料是能正常解密解析的:
ok,到這裡我們已經完成了本篇的實踐内容 。
我們最後來針對這個 jasypt的加密解密使用鑰匙做點事情,
我們要把這個參數變成 不寫死不暴露 的:
方案提供思路: 當作啟動參數傳入
實踐:
我們把yml的鑰匙去掉, 保留原先加密完的資料配置 :
spring:
datasource:
druid:
url: ENC(OGNie1iT/W6LBSdXvmIv/tyQA69HbI1OUSh3MM/UeTv2dufbuJBu0aEf7EN86DOPiXOZyHtYTVwu+3AHtmPPZYxXbaw9xU04x8POZsWjx6BmQBmdNRyBVcO7IixG9F+WK6+jlRhXEsgqTk+MOpDuPBBmf8Zw+LoWeKPICfqn2SOJAOJ2gSrE7wDSR4YRejgDWDPcMIvo4yfKG8pJZZ6OeQ==)
username: ENC(cuaMHDblkuVeHSFyV+OKmQ==)
password: ENC(BEQNsEv0gIkvRWwg2P9ktg==)
server:
port: 8766
mybatis:
config-location: classpath:mybatis/mybatis-config.xml
mapper-locations: classpath:mybatis/mapper/*.xml
然後當作 啟動參數傳入
-Djasypt.encryptor.password=JCCCCgd6Tsjckd87xGy6H1JGb47G2H72
如果是使用jar運作就對應指令裡面加入 類似:
java -jar -Djasypt.encryptor.password=JCCCCgd6Tsjckd87xGy6H1JGb47G2H72 XXX-xxxx.jar
模拟測試一下這種方式: