本文中介紹的是基於Sharding-JDBC 4.0和jasypt 3.0及其以上版本對數據庫連接密碼進行加密操作
引入依賴
項目的pom.xml中引入maven依賴
<dependency> <groupId>org.apache.shardingsphere</groupId> <artifactId>sharding-jdbc-spring-boot-starter</artifactId> <version>4.0.0-RC3</version> </dependency> <dependency> <groupId>com.github.ulisesbocchio</groupId> <artifactId>jasypt-spring-boot-starter</artifactId> <version>3.0.3</version> </dependency>
生成密文
首先通過jasypt-1.9.3.jar生成密文
PS C:\Users\Tuhuadmin\.m2\repository\org\jasypt\jasypt\1.9.3> java -cp .\jasypt-1.9.3.jar org.jasypt.intf.cli.JasyptPBEStringEncryptionCLI input=root password=fulfillForward algorithm=PBEWithMD5AndDES
命令行下執行該命令,打印如下
----ENVIRONMENT----------------- Runtime: Oracle Corporation Java HotSpot(TM) 64-Bit Server VM 11.0.2+7-LTS ----ARGUMENTS------------------- input: root password: fulfillForward algorithm: PBEWithMD5AndDES ----OUTPUT---------------------- 9v+20XzVBiBBocheB7PWwA==
OUTPUT打印的部分就是加密后的密文。
需要注意的是,如果生成密碼命令是root$123,其中包含特殊字符$,需在賦值input
字段時前后加了單引號(input='root$123'),如果沒有包含特殊字符,單引號可以去掉。包含特殊字符的待加密明文不加單引號,Jasypt 在加密時解析存在問題,會把 root$123 解析成 root
jasypt需要設置用於加密明文的密鑰password,它會對input內容加密。解釋下參數:
參數 | 說明 |
input |
明文密碼 |
password | 加密的鹽值 |
algorithm | 加密策略,對稱加密 |
解密方式 PS C:\Users\ryt\.m2\repository\org\jasypt\jasypt\1.9.3> java -cp .\jasypt-1.9.3.jar org.jasypt.intf.cli.JasyptPBEStringDecryptionCLI input=9v+20XzVBiBBocheB7PWwA== password=fulfillForward algorithm=PBEWithMD5AndDES ----ENVIRONMENT----------------- Runtime: Oracle Corporation Java HotSpot(TM) 64-Bit Server VM 11.0.2+7-LTS ----ARGUMENTS------------------- input: 9v+20XzVBiBBocheB7PWwA== password: fulfillForward algorithm: PBEWithMD5AndDES ----OUTPUT---------------------- root
配置文件中設置密文
上一步中獲得到了連接數據庫的密碼密文,打開應用的配置文件application.properties,修改數據庫連接密碼為如下格式:
spring.shardingsphere.datasource.ds0.password=ENC(9v+20XzVBiBBocheB7PWwA==)
通過 ENC(密文) 的方式,在程序中獲取到的spring.shardingsphere.datasource.ds0.password會自動轉換成明文內容(root)
同時需在配置文件application.properties中添加加密鹽值和加密策略
jasypt.encryptor.password=fulfillForward jasypt.encryptor.algorithm=PBEWithMD5AndDES jasypt.encryptor.iv-generator-classname=org.jasypt.iv.NoIvGenerator
到此通過Sharding-JDBC做分庫分表,數據庫連接密碼加密就完成了。
參考連接:https://github.com/ulisesbocchio/jasypt-spring-boot#update-11242019-version-300-release-includes
本人隨筆,在此記錄,如有問題可微信討論,微信號:429532901。