SpringBoot2整合jasypt3.0.3 最簡便配置檔案 資料庫密碼 加密工具(加密解密工具類,非命令列)
阿新 • • 發佈:2020-11-24
環境
- SpringBoot2.0以上
- jasypt 3.0.3
- jdk8
加密
username: root # 資料庫賬號
password: 123456 # 資料庫密碼
- 匯入依賴
<dependency> <groupId>com.github.ulisesbocchio</groupId> <artifactId>jasypt-spring-boot-starter</artifactId> <version>3.0.3</version> </dependency>
- application.yml中新增如下配置
注意:金鑰可以寫在application.yml配置檔案中,也可以直接加入到idea的虛擬機器引數中
jasypt:
encryptor:
# 金鑰
password: jasypt
# 指定加密方式
algorithm: PBEWithMD5AndDES
iv-generator-classname: org.jasypt.iv.NoIvGenerator
- 建立密碼加密工具類
注意:程式碼中“jasypt”
為jasypt所需要的加密密碼配置,也就是祕鑰,可以替換成自己需要的
public class JasyptUtil { public static void main(String[] args) { // 加密 String encPwd1 = encyptPwd("jasypt", "root"); // 加密 String encPwd2 = encyptPwd("jasypt", "123456"); System.out.println(encPwd1); System.out.println(encPwd2); } /** * 加密方法 * @param password jasypt所需要的加密密碼配置 * @param value 需要加密的密碼 */ public static String encyptPwd(String password, String value) { PooledPBEStringEncryptor encryptor = new PooledPBEStringEncryptor(); SimpleStringPBEConfig config = new SimpleStringPBEConfig(); config.setPassword(password); config.setAlgorithm("PBEWithMD5AndDES"); config.setKeyObtentionIterations("1000"); config.setPoolSize("1"); config.setProviderName("SunJCE"); config.setSaltGeneratorClassName("org.jasypt.salt.RandomSaltGenerator"); config.setStringOutputType("base64"); encryptor.setConfig(config); String result = encryptor.encrypt(value); return result; } }
-
執行工具
-
替換application.yml中的賬號密碼
注意:生成的加密資料放到配置檔案時需要用ENC()
包圍起來
username: ENC(3g2WGnuz+u7Fq1T6xbQ7TQ==) # 資料庫賬號
password: ENC(zniE4Hlid104xsxdzQcK/w==) # 資料庫密碼
解密
- 重複加密
步驟1
- 重複加密
步驟2
- 建立解密工具類
public static void main(String[] args) { // 加密 String encPwd1 = decyptPwd("jasypt", "3g2WGnuz+u7Fq1T6xbQ7TQ=="); // 加密 String encPwd2 = decyptPwd("jasypt", "zniE4Hlid104xsxdzQcK/w=="); System.out.println("username"+encPwd1); System.out.println("password"+encPwd2); } /** * 解密 * @param password jasypt所需要的加密密碼配置 * @param value 需要解密的密碼 */ public static String decyptPwd(String password, String value) { PooledPBEStringEncryptor encryptor = new PooledPBEStringEncryptor(); SimpleStringPBEConfig config = new SimpleStringPBEConfig(); config.setPassword(password); config.setAlgorithm("PBEWithMD5AndDES"); config.setKeyObtentionIterations("1000"); config.setPoolSize("1"); config.setProviderName("SunJCE"); config.setSaltGeneratorClassName("org.jasypt.salt.RandomSaltGenerator"); config.setStringOutputType("base64"); encryptor.setConfig(config); String result = encryptor.decrypt(value); return result; }
- 執行工具
總結
完整工具程式碼
public class JasyptUtil {
public static void main(String[] args) {
// 加密
String encPwd1 = encyptPwd("jasypt", "root");
// 加密
String encPwd2 = encyptPwd("jasypt", "2190268123asd");
// 解密
String decPwd1 = decyptPwd("jasypt", encPwd1);
// 解密
String decPwd2 = decyptPwd("jasypt", encPwd2);
System.out.println(encPwd1);
System.out.println(encPwd2);
System.out.println("username:"+decPwd1);
System.out.println("password:"+decPwd2);
}
/**
* 解密
* @param password jasypt所需要的加密密碼配置
* @param value 需要加密的密碼
*/
public static String decyptPwd(String password, String value) {
PooledPBEStringEncryptor encryptor = new PooledPBEStringEncryptor();
SimpleStringPBEConfig config = new SimpleStringPBEConfig();
config.setPassword(password);
config.setAlgorithm("PBEWithMD5AndDES");
config.setKeyObtentionIterations("1000");
config.setPoolSize("1");
config.setProviderName("SunJCE");
config.setSaltGeneratorClassName("org.jasypt.salt.RandomSaltGenerator");
config.setStringOutputType("base64");
encryptor.setConfig(config);
String result = encryptor.decrypt(value);
return result;
}
/**
* 加密方法
* @param password jasypt所需要的加密密碼配置
* @param value 需要加密的密碼
*/
public static String encyptPwd(String password, String value) {
PooledPBEStringEncryptor encryptor = new PooledPBEStringEncryptor();
SimpleStringPBEConfig config = new SimpleStringPBEConfig();
config.setPassword(password);
config.setAlgorithm("PBEWithMD5AndDES");
config.setKeyObtentionIterations("1000");
config.setPoolSize("1");
config.setProviderName("SunJCE");
config.setSaltGeneratorClassName("org.jasypt.salt.RandomSaltGenerator");
config.setStringOutputType("base64");
encryptor.setConfig(config);
String result = encryptor.encrypt(value);
return result;
}
}
jasypt3.0.3的加密解密是非常簡單的,大家可以繼續封裝成一個工具,把重複程式碼提出來
,可以做到不僅僅是加密配置檔案,也可以加密包括一些資料。
另外jasypt3.0.3的版本中,每次加密相同的資料組得到的加密後密碼是不同的,無論取哪個密碼,都不影響使用哦!
如果覺得有幫助的話給個免費的點贊吧,Thanks♪(・ω・)ノ