使用Jasypt在Spring Boot專案中加密配置檔案中任何密碼 - Aanchal Sharma

banq發表於2020-02-20

在Spring Boot專案中,經常必須連線到MongoDB等資料庫,並將資料庫連線的真實密碼儲存在Spring Boot專案的配置檔案(application.yml或application.properties)中。甚至授權進行其他API呼叫所需的密碼或令牌也以相同的方式儲存。Jasypt庫可以幫助你加密這些密碼。

什麼是Jasypt?

Jasypt Java為Spring Boot應用中的屬性源提供了加密支援。它將幫助您以較少的工作量而無需編寫任何程式碼就將基本的加密功能新增到專案中!是的,您沒聽錯我的話,沒有程式碼……在您的專案中到處都是。Springboot是一個非常強大的框架,可以幫助您新增加密功能,而無需實現任何加密方法。Jasypt是高度可配置的。

使用Jasypt加密的步驟

步驟1→ 新增jasypt的maven依賴項

在pom.xml檔案中,新增可以在maven儲存庫中輕鬆找到的maven依賴項。(我使用jasypt-spring-boot版本2.0.0,因為我發現它很穩定,並且遇到版本3.0.0的問題)

步驟2→在Spring Boot Application主配置類中新增註釋

需要新增@EnableEncryptableProperties批註,以使應用程式瞭解整個Spring Environment的可加密屬性。

步驟3→確定用於加密和解密的金鑰

祕密金鑰(您可以將其視為加密方法中使用的鹽)用於加密密碼,之後可以用於解密加密值以獲取實際密碼。您可以選擇任何值作為金鑰。

步驟4→生成加密金鑰

可以通過以下兩種方法之一生成加密金鑰:

4.1:使用Jasypt線上工具:

通過傳遞所選的祕密金鑰,此連結可用於生成加密金鑰。

加密密碼:abcd1234
選擇加密型別:Two-way encryption雙向加密(預設使用PBEWithMD5AndDES)
金鑰:hello (可以是任何值)
加密的字串:kNuS1WAezYE7cph7zXVTiPSQSdHTx7Kv
您實際上可以使用該工具通過解密來加密和檢查加密金鑰。

4.2:使用jasypt Jar:

您可以從maven儲存庫下載jasypt jar檔案,並通過以下命令執行它:

java -cp /<Path where the jar is located>/jasypt-1.9.3/lib/jasypt-1.9.3.jar org.jasypt.intf.cli.JasyptPBEStringEncryptionCLI input=”xyz123" password=secretkey algorithm=PBEWithMD5AndDES

以下是傳遞給執行jar的命令列引數的意義:

  1. 輸入:abcd1234 (要加密的實際密碼)
  2. 密碼:hello(您選擇的祕密金鑰)
  3. 演算法:PBEWithMD5AndDES (使用預設演算法)
  4. 輸出:scEjemHosjc / hjA8saT7Y6uC65bs0swg(輸入的加密值)

注意:雖然加密值3.1和3.2中的加密String和OUTPUT分別不同,因為金鑰相同,所以兩種情況下的解密結果都相同(abcd1234)。

步驟5→將加密金鑰新增到配置檔案(application.yml或application.properties)中

現在,而不是新增實際密碼如上面的“ abcd1234”,您需要新增通過以上任何一種方法生成的加密值。但是,jasypt依賴項將如何理解配置檔案的特定屬性需要解密?因此,為了使Jasypt知道您的加密值,它使用了一個約定,需要以以下格式新增:

ENC(<encrypted key>)
ENC(scEjemHosjc/hjA8saT7Y6uC65bs0swg)

使用Jasypt在Spring Boot專案中加密配置檔案中任何密碼 - Aanchal Sharma

在上圖中,完成了資料庫密碼的加密。您可以在必須隱藏實際密碼的任何情況下使用它。

步驟6:需要在執行時傳遞所選的祕密金鑰以進行解密

您需要使Jasypt知道用於形成加密值的金鑰。因此,以下是傳遞金鑰的不同方法:

6.1:將其作為屬性傳遞到配置檔案中。像往常一樣執行專案,解密就會發生。

jaypt:
  encrytor:
    password:hello

6.2: 使用以下命令執行專案:

$mvn-Djasypt.encryptor.password=<secretkey> spring-boot:run
$mvn-Djasypt.encryptor.password=hello spring-boot:run

6.3: 環境設定JASYPT_ENCRYPTOR_PASSWORD=<secretkey>

JASYPT_ENCRYPTOR_PASSWORD=hello

就可以通常的方式執行專案。

結論

有時有必要隱藏您不想在程式碼中公開的機密密碼。因此,jasypt是在任何Spring Boot應用程式中實現此目標的簡便且適當的方法。請按照上述6個步驟操作,您就可以開始…

相關文章