Jasypt 教學

我們的系統難免都會有一些重要的個資訊息,儘管我們會將重要的個人訊息,如:登入的密碼…等資訊進行加密並儲存在資料庫中,但是若沒有警慎處理,還是可以被有心人士取得。

而在整個產品上線的過程中,會有主要三種角色參與,分別是工程師操作人員管理人員
另外,需要正確的解開密碼也需要三個要素:程式邏輯加密金鑰平台權限

我們將關係圖畫出下方。

程式邏輯 加密金鑰 平台權限
工程師 V V
操作人員 V
管理人員 V V

我們觀察上面表格可以發現,如果做好正確規範,是沒有人可以取得系統的機密資料。

不過細心的朋友可能發現,操作人員在執行過板的時候,是可以看到 properties 內容,並從中取得加密金鑰啊?
那為什麼 Greddy 沒有勾選起來呢?

因為今天我們要跟大家介紹的 Jasypt 就是專門在做這件事情,將 properties內容中的重要資訊,如資料庫的密碼或是其他加密的金鑰…等進行加密。

Quick Start

Jasypt 是一個 java 的 lib ,他提供基本的加密功能,讓我們不需要深入了解密碼學也可以快速達成。

透過 Maven 下載 jasypt Lib

  • pom.xml 中,新增 dependency
1
2
3
4
5
<dependency>
<groupId>com.github.ulisesbocchio</groupId>
<artifactId>jasypt-spring-boot-starter</artifactId>
<version>2.0.0</version>
</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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
----ENVIRONMENT-----------------

Runtime: Oracle Corporation Java HotSpot(TM) 64-Bit Server VM 25.171-b11



----ARGUMENTS-------------------

algorithm: PBEWithMD5AndDES
input: root
password: X6nVP89KZ8Ar



----OUTPUT----------------------

qfVLCII/YydI9mgoJ5fnxw==

程式修改

  • 修改 application.yml,將需要加密的文字加上 ***ENC*** 和括弧包起來。

修改前

1
2
3
4
spring.datasource:
url: jdbc:mysql://localhost:3306/db?useSSL=false&characterEncoding=UTF-8
username: root
password: root

修改後

1
2
3
4
spring.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

Jasypt

謝謝您的支持與鼓勵

Ads