iT邦幫忙

2022 iThome 鐵人賽

DAY 14
0

緣起

把資料庫密碼、API Key 之類的敏感資訊明文放在配置檔中是不安全的作法,我想這個道理大家都懂。但不想花時間力氣去深入研究加解密,甚至看到 "密碼學" 三個字就身體不適的人應該也不在少數,至少我是其中一位。

那難道沒有簡單加解密的方法可以拯救弱小無助的碼農嗎?

各位放心,只要還有人在祈禱,那肯定就有大神降下施捨,所以 Jayspt 它來了。

使用方法

Jasypt 是一個 java 的套件,讓開發者可以輕鬆使用基本的加密功能,而無需深入了解密碼學。可通過 jasypt-spring-boot-starter 專案與 Spring Boot 整合使用。

通過 Maven 引入套件

pom.xml 中加入依賴。

<dependency>
    <groupId>com.github.ulisesbocchio</groupId>
    <artifactId>jasypt-spring-boot-starter</artifactId>
    <version>2.1.1</version>
</dependency>

加解密

介紹兩種方法

方法一: 使用 CLI

Maven 下載好套件後,到 .m2 下的 jayspt 資料夾。

$ cd /Users/joeliu/.m2/repository/org/jasypt/jasypt/1.9.3
  • 加密指令 java -cp jasypt-1.9.3.jar org.jasypt.intf.cli.JasyptPBEStringEncryptionCLI input="{欲加密文字}" password={密鑰} algorithm={演算法}

  • 列出可用的演算法 java -cp jasypt-1.9.3.jar org.jasypt.intf.cli.AlgorithmRegistryCLI

執行加密

$ java -cp jasypt-1.9.3.jar org.jasypt.intf.cli.JasyptPBEStringEncryptionCLI input=HelloWorld password=fqKRsy4q algorithm=PBEWithMD5AndDES

----ENVIRONMENT-----------------

Runtime: Oracle Corporation OpenJDK 64-Bit Server VM 11.0.2+9



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

input: HelloWorld
password: fqKRsy4q
algorithm: PBEWithMD5AndDES



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

qeQzpBOrhb6I2ED6IK+LsCtCcx1WIyRB
  • 解密指令 java -cp jasypt-1.9.3.jar org.jasypt.intf.cli.JasyptPBEStringDecryptionCLI input="{已加密文字}" password={密鑰} algorithm={演算法}

執行解密

$ java -cp jasypt-1.9.3.jar org.jasypt.intf.cli.JasyptPBEStringDecryptionCLI input="qeQzpBOrhb6I2ED6IK+LsCtCcx1WIyRB" password=fqKRsy4q algorithm=PBEWithMD5AndDES

----ENVIRONMENT-----------------

Runtime: Oracle Corporation OpenJDK 64-Bit Server VM 11.0.2+9



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

input: qeQzpBOrhb6I2ED6IK+LsCtCcx1WIyRB
password: fqKRsy4q
algorithm: PBEWithMD5AndDES



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

HelloWorld

方法二: 程式內呼叫套件

application.properties 中加入配置。

jasypt.encryptor.password=fqKRsy4q
jasypt.encryptor.algorithm=PBEWithMD5AndDES
jasypt.encryptor.saltGeneratorClassname=org.jasypt.salt.RandomSaltGenerator
jasypt.encryptor.ivGeneratorClassname=org.jasypt.salt.RandomIVGenerator
jasypt.encryptor.stringOutputType=base64

密鑰 jasypt.encryptor.password 如果被偷那加密了也沒用,建議用環境變數帶入會比較安全。

呼叫 StringEncryptor 執行加解密。

// Jasypt預設生成的加密器
@Autowired
private StringEncryptor stringEncryptor;

public void encrypt() {
    // 明文
    String plainText = "HelloWorld";
    // 加密
    String cipherText = stringEncryptor.encrypt(plainText);
    // 解密
    String decryptedText = stringEncryptor.decrypt(cipherText);
}

也可以在 application.properties 中已加密的值外加上 ENC(),讓 Jasypt 自動解密。

web.user=user
web.password=ENC(qeQzpBOrhb6I2ED6IK+LsCtCcx1WIyRB)

上一篇
[Day13]Kubernetes與GKE簡介
下一篇
[Day15] Spring Boot簡介✖搭配
系列文
Google商家大解密就靠網頁設計來加成30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言