1.前言
我們項目中經(jīng)常有一些配置文件涉及密碼一些敏感信息先改,我們想加密方式來保護密碼,最長用的方式Oracle JEC Jar;
這里我們采用jasypt.jar來加密配置文件。
2.準(zhǔn)備jar包
<dependency>
<groupId>com.github.ulisesbocchio</groupId>
<artifactId>jasypt-spring-boot-starter</artifactId>
<version>2.1.2</version>
</dependency>
3.構(gòu)建一個spring boot 項目
- 在application.yml添加一個password禁谦,這里可以認(rèn)為是密鑰。
jasypt:
encryptor:
password: even
- 本項目是整合mysql數(shù)據(jù)庫為列,現(xiàn)在將mysql的密碼加密废封。在test包中密碼加密得到加密后的字符串州泊。
@Autowired
private StringEncryptor stringEncryptor;
@Test
public void contextLoads() {
String mysqlPassWord="UI.com1234qwer";
String encryptMysql= stringEncryptor.encrypt(mysqlPassWord);
String decryptMysql=stringEncryptor.decrypt(encryptMysql);
System.out.println(encryptMysql);
System.out.println(decryptMysql);
}
輸出結(jié)果:
OfYtKN5FQJ5E8vnAeo8CiqLT4CdHzIcB
UI.com1234qwer
- 在application.yml把輸出的字符串結(jié)果用ENC()包裹起來。
spring:
application:
name: file-encryption
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://192.168.0.10:3310/study?useSSL=false&serverTimezone=CTT&useUnicode=true&characterEncoding=utf-8&rewriteBatchedStatements=true&useOldAliasMetadataBehavior=true
username: root
password: ENC(sXEm4xE5UAhod49Jow6SWrhaZCFTl9i2)
hikari:
pool-name: Hikari-Pool
minimum-idle: 5
maximum-pool-size: 15
auto-commit: true
idle-timeout: 180000
max-lifetime: 180000
connection-timeout: 5000
connection-test-query: select 1
type: com.zaxxer.hikari.HikariDataSource
- 啟動項目程序正常啟動漂洋。
4.通過其他方式設(shè)置密鑰
- 以上只是一個demo遥皂,我們實際開發(fā)中或者生產(chǎn)環(huán)境中是不會直接將密鑰寫在配置文件中」羝可以通過如下方式寫入代碼中渴肉。
/**
* 設(shè)置密鑰
* 這里每次加密的字符串都不一樣確可以通過密鑰解密出相同的明文
*/
@Test
public void setPassword(){
BasicTextEncryptor basicTextEncryptor = new BasicTextEncryptor();
// application.properties, jasypt.encryptor.password
basicTextEncryptor.setPassword("even");
String mysqlPassWord="UI.com1234qwer";
String rootOne=basicTextEncryptor.encrypt(mysqlPassWord);
String rootTwo=basicTextEncryptor.encrypt(mysqlPassWord);
String rootTree=basicTextEncryptor.encrypt(mysqlPassWord);
// encrypt mysqlPassWord
System.out.println(rootOne);
System.out.println(rootTwo);
System.out.println(rootTree);
// decrypt, the result is mysqlPassWord
System.out.println(basicTextEncryptor.decrypt(rootOne));
System.out.println(basicTextEncryptor.decrypt(rootTwo));
System.out.println(basicTextEncryptor.decrypt(rootTree));
}
- 注釋掉application.yml,在開發(fā)工具VM中添加"-Djasypt.encryptor.password=even"
#jasypt:
# encryptor:
# password: even
VM options添加,運行test方法正常運行
-Djasypt.encryptor.password=even
5.在打成jar包運行的時候只需要添加"-Djasypt.encryptor.password=even"即可爽冕。
java -jar -Djasypt.encryptor.password=even xxx.jar