1. 程式人生 > 資料庫 >SpringBoot2整合jasypt3.0.3 最簡便配置檔案 資料庫密碼 加密工具(加密解密工具類,非命令列)

SpringBoot2整合jasypt3.0.3 最簡便配置檔案 資料庫密碼 加密工具(加密解密工具類,非命令列)

環境
  • SpringBoot2.0以上
  • jasypt 3.0.3
  • jdk8
加密
username: root     # 資料庫賬號
password: 123456     # 資料庫密碼
  1. 匯入依賴
<dependency>
    <groupId>com.github.ulisesbocchio</groupId>
    <artifactId>jasypt-spring-boot-starter</artifactId>
    <version>3.0.3</version>
</dependency>

  1. application.yml中新增如下配置

注意:金鑰可以寫在application.yml配置檔案中,也可以直接加入到idea的虛擬機器引數中

在這裡插入圖片描述

jasypt:
  encryptor:
    # 金鑰
    password: jasypt
    # 指定加密方式
    algorithm: PBEWithMD5AndDES
    iv-generator-classname: org.jasypt.iv.NoIvGenerator

  1. 建立密碼加密工具類

注意:程式碼中“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;
    }
}
  1. 執行工具
    在這裡插入圖片描述

  2. 替換application.yml中的賬號密碼

注意:生成的加密資料放到配置檔案時需要用ENC()包圍起來

username: ENC(3g2WGnuz+u7Fq1T6xbQ7TQ==)     # 資料庫賬號
password: ENC(zniE4Hlid104xsxdzQcK/w==)     # 資料庫密碼
解密
  1. 重複加密步驟1
  2. 重複加密步驟2
  3. 建立解密工具類
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;
    }
  1. 執行工具

在這裡插入圖片描述

總結

完整工具程式碼

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♪(・ω・)ノ