Jasypt 教學
我們的系統難免都會有一些重要的個資訊息,儘管我們會將重要的個人訊息,如:登入的密碼…等資訊進行加密並儲存在資料庫中,但是若沒有警慎處理,還是可以被有心人士取得。
而在整個產品上線的過程中,會有主要三種角色參與,分別是工程師
、操作人員
與管理人員
。
另外,需要正確的解開密碼也需要三個要素:程式邏輯
、加密金鑰
與 平台權限
。
我們將關係圖畫出下方。
程式邏輯 | 加密金鑰 | 平台權限 | |
---|---|---|---|
工程師 | V | V | |
操作人員 | V | ||
管理人員 | V | V |
我們觀察上面表格可以發現,如果做好正確規範,是沒有人可以取得系統的機密資料。
不過細心的朋友可能發現,操作人員在執行過板的時候,是可以看到 properties
內容,並從中取得加密金鑰啊?
那為什麼 Greddy 沒有勾選起來呢?
因為今天我們要跟大家介紹的 Jasypt 就是專門在做這件事情,將 properties
內容中的重要資訊,如資料庫的密碼或是其他加密的金鑰…等進行加密。
Quick Start
Jasypt 是一個 java 的 lib ,他提供基本的加密功能,讓我們不需要深入了解密碼學也可以快速達成。
透過 Maven 下載 jasypt Lib
- 在
pom.xml
中,新增 dependency
1 | <dependency> |
透過 CLI 取得加密後文字
- 當 Maven 更新 pom.xml 並下載 Lib 後,進入
.m2
資料夾
1 | $ cd /Users/greddy/.m2/repository/org/jasypt/jasypt/1.9.2 |
- 進行加密,如:將
root
進行加密
指令為
java -cp jasypt-1.9.2.jar org.jasypt.intf.cli.JasyptPBEStringEncryptionCLI input="{加密文字}" password={加密密鑰} algorithm={加密演算法}
1 | $ java -cp jasypt-1.9.2.jar org.jasypt.intf.cli.JasyptPBEStringEncryptionCLI input="root" password=X6nVP89KZ8Ar algorithm=PBEWithMD5AndDES |
演算法選擇
- Digest : MD2, MD5, SHA, SHA-256, SHA-384, SHA-512
- PBE : PBEWITHMD5ANDDES, PBEWITHMD5ANDTRIPLEDES, PBEWITHSHA1ANDDESEDE, PBEWITHSHA1ANDRC2_40
- 輸出結果
1 | ----ENVIRONMENT----------------- |
程式修改
- 修改
application.yml
,將需要加密的文字加上***ENC***
和括弧包起來。
修改前1
2
3
4spring.datasource:
url: jdbc:mysql://localhost:3306/db?useSSL=false&characterEncoding=UTF-8
username: root
password: root
修改後1
2
3
4spring.datasource:
url: jdbc:mysql://localhost:3306/db?useSSL=false&characterEncoding=UTF-8
username: root
password: ENC(qfVLCII/YydI9mgoJ5fnxw==)
- 新增加 EncryptorConfig.java
這邊我會建議將剛剛設定的
password
的值寫在程式中,而非寫在properties
裡,因為這個參數希望只有工程師知道,目的是為了多一層的防護措施。
另外,我們可以設定Profile
來決定使用的環境,下面為prod
環境使用。
小工具
大家有跟我一樣覺得想密碼很困難的事情?這邊提供一個小工具給大家。密碼產生器
Reference
Donate
謝謝您的支持與鼓勵