最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

springboot jasypt2.x與jasypt3.x的使用方式

 更新時(shí)間:2024年09月29日 14:49:20   作者:頭未禿  
在軟件開發(fā)中,將配置文件中的敏感信息(如數(shù)據(jù)庫(kù)密碼)進(jìn)行加密是保障安全的有效手段,jasypt框架提供了這一功能,支持通過加密工具類或命令行工具生成密文,并通過修改配置文件和啟動(dòng)參數(shù)的方式使用密文和密鑰,這樣即便配置文件被泄露

1、前言

如果我們把大量的配置信息都放在配置文件中是會(huì)有安全隱患的,那么如何消除這個(gè)隱患呢?

最直接的方式就是把配置信息中的一些敏感信息(比如數(shù)據(jù)庫(kù)密碼、中間件密碼)加密,然后程序在獲取這些配置的時(shí)候解密,就可以達(dá)到目的。

這個(gè)時(shí)候,jasypt框架就派上用場(chǎng)了。

2.x 版本的分析

如果引入的是 2.x 的版本,啟動(dòng)信息如下:

String Encryptor custom Bean not found with name 'jasyptStringEncryptor'. Initializing Default String Encryptor
Encryptor config not found for property jasypt.encryptor.algorithm, using default value: PBEWithMD5AndDES
Encryptor config not found for property jasypt.encryptor.key-obtention-iterations, using default value: 1000
Encryptor config not found for property jasypt.encryptor.pool-size, using default value: 1
Encryptor config not found for property jasypt.encryptor.provider-name, using default value: null
Encryptor config not found for property jasypt.encryptor.provider-class-name, using default value: null
Encryptor config not found for property jasypt.encryptor.salt-generator-classname, using default value: org.jasypt.salt.RandomSaltGenerator
Encryptor config not found for property jasypt.encryptor.iv-generator-classname, using default value: org.jasypt.iv.NoIvGenerator
Encryptor config not found for property jasypt.encryptor.string-output-type, using default value: base64

通過以上信息的解讀,我們可以了解到的信息如下:

默認(rèn)加密算法:PBEWithMD5AndDES
默認(rèn)的迭代次數(shù): 1000
默認(rèn)池大?。?1
默認(rèn)生成鹽的類:org.jasypt.salt.RandomSaltGenerator
默認(rèn)IV生成器類:org.jasypt.iv.NoIvGenerator
默認(rèn)輸出類型:base64

3.x 版本分析

如果引入的是 3.x 的版本,啟動(dòng)信息如下:

String Encryptor custom Bean not found with name 'jasyptStringEncryptor'. Initializing Default String Encryptor
Encryptor config not found for property jasypt.encryptor.algorithm, using default value: PBEWITHHMACSHA512ANDAES_256
Encryptor config not found for property jasypt.encryptor.key-obtention-iterations, using default value: 1000
Encryptor config not found for property jasypt.encryptor.pool-size, using default value: 1
Encryptor config not found for property jasypt.encryptor.provider-name, using default value: null
Encryptor config not found for property jasypt.encryptor.provider-class-name, using default value: null
Encryptor config not found for property jasypt.encryptor.salt-generator-classname, using default value: org.jasypt.salt.RandomSaltGenerator
Encryptor config not found for property jasypt.encryptor.iv-generator-classname, using default value: org.jasypt.iv.RandomIvGenerator
Encryptor config not found for property jasypt.encryptor.string-output-type, using default value: base64

通過以上信息的解讀,我們可以了解到的信息如下:

默認(rèn)加密算法:PBEWITHHMACSHA512ANDAES_256
默認(rèn)的迭代次數(shù): 1000
默認(rèn)池大小: 1
默認(rèn)生成鹽的類:org.jasypt.salt.RandomSaltGenerator
默認(rèn)IV生成器類:org.jasypt.iv.RandomIvGenerator
默認(rèn)輸出類型:base64

2、使用

1. 引入pom包

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

2. 創(chuàng)建加密工具類生成密碼

import org.jasypt.encryption.pbe.PooledPBEStringEncryptor;
import org.jasypt.encryption.pbe.StandardPBEStringEncryptor;
import org.jasypt.encryption.pbe.config.EnvironmentStringPBEConfig;
import org.jasypt.encryption.pbe.config.SimpleStringPBEConfig;

/**
 * Jasyp加解密工具類
 * @author chenxc
 * @date 2020/4/14 14:28
 */
public class JasypUtil {

    private static final String PBEWITHMD5ANDDES = "PBEWithMD5AndDES";

    private static final String PBEWITHHMACSHA512ANDAES_256 = "PBEWITHHMACSHA512ANDAES_256";

    /**
     * Jasyp2.x 加密(PBEWithMD5AndDES)
     * @param		 plainText      待加密的原文
     * @param		 factor         加密秘鑰
     * @return       java.lang.String
     */
    public static String encryptWithMD5(String plainText, String factor) {
        // 1. 創(chuàng)建加解密工具實(shí)例
        StandardPBEStringEncryptor encryptor = new StandardPBEStringEncryptor();
        // 2. 加解密配置
        EnvironmentStringPBEConfig config = new EnvironmentStringPBEConfig();
        config.setAlgorithm(PBEWITHMD5ANDDES);
        config.setPassword(factor);
        encryptor.setConfig(config);
        // 3. 加密
        return encryptor.encrypt(plainText);
    }

    /**
     * Jaspy2.x 解密(PBEWithMD5AndDES)
     * @param		 encryptedText      待解密密文
     * @param		 factor             解密秘鑰
     * @return       java.lang.String
     */
    public static String decryptWithMD5(String encryptedText, String factor) {
        // 1. 創(chuàng)建加解密工具實(shí)例
        StandardPBEStringEncryptor encryptor = new StandardPBEStringEncryptor();
        // 2. 加解密配置
        EnvironmentStringPBEConfig config = new EnvironmentStringPBEConfig();
        config.setAlgorithm(PBEWITHMD5ANDDES);
        config.setPassword(factor);
        encryptor.setConfig(config);
        // 3. 解密
        return encryptor.decrypt(encryptedText);
    }

    /**
     * Jasyp3.x 加密(PBEWITHHMACSHA512ANDAES_256)
     * @param		 plainText  待加密的原文
     * @param		 factor     加密秘鑰
     * @return       java.lang.String
     */
    public static String encryptWithSHA512(String plainText, String factor) {
        // 1. 創(chuàng)建加解密工具實(shí)例
        PooledPBEStringEncryptor encryptor = new PooledPBEStringEncryptor();
        // 2. 加解密配置
        SimpleStringPBEConfig config = new SimpleStringPBEConfig();
        config.setPassword(factor);
        config.setAlgorithm(PBEWITHHMACSHA512ANDAES_256);
        // 為減少配置文件的書寫,以下都是 Jasyp 3.x 版本,配置文件默認(rèn)配置
        config.setKeyObtentionIterations( "1000");
        config.setPoolSize("1");
        config.setProviderName("SunJCE");
        config.setSaltGeneratorClassName("org.jasypt.salt.RandomSaltGenerator");
        config.setIvGeneratorClassName("org.jasypt.iv.RandomIvGenerator");
        config.setStringOutputType("base64");
        encryptor.setConfig(config);
        // 3. 加密
        return encryptor.encrypt(plainText);
    }

    /**
     * Jaspy3.x 解密(PBEWITHHMACSHA512ANDAES_256)
     * @param		 encryptedText  待解密密文
     * @param		 factor         解密秘鑰
     * @return       java.lang.String
     */
    public static String decryptWithSHA512(String encryptedText, String factor) {
        // 1. 創(chuàng)建加解密工具實(shí)例
        PooledPBEStringEncryptor encryptor = new PooledPBEStringEncryptor();
        // 2. 加解密配置
        SimpleStringPBEConfig config = new SimpleStringPBEConfig();
        config.setPassword(factor);
        config.setAlgorithm(PBEWITHHMACSHA512ANDAES_256);
        // 為減少配置文件的書寫,以下都是 Jasyp 3.x 版本,配置文件默認(rèn)配置
        config.setKeyObtentionIterations( "1000");
        config.setPoolSize("1");
        config.setProviderName("SunJCE");
        config.setSaltGeneratorClassName("org.jasypt.salt.RandomSaltGenerator");
        config.setIvGeneratorClassName("org.jasypt.iv.RandomIvGenerator");
        config.setStringOutputType("base64");
        encryptor.setConfig(config);
        // 3. 解密
        return encryptor.decrypt(encryptedText);
    }

    public static void main(String[] args) {
        String factor = "salt";
        String plainText = "123456";
        String encryptWithMD5Str = encryptWithMD5(plainText, factor);
        String decryptWithMD5Str = decryptWithMD5(encryptWithMD5Str, factor);

        String encryptWithSHA512Str = encryptWithSHA512(plainText, factor);
        String decryptWithSHA512Str = decryptWithSHA512(encryptWithSHA512Str, factor);
        System.out.println("采用MD5加密前原文密文:" + encryptWithMD5Str);
        System.out.println("采用MD5解密后密文原文:" + decryptWithMD5Str);
        System.out.println();
        System.out.println("采用SHA512加密前原文密文:" + encryptWithSHA512Str);
        System.out.println("采用SHA512解密后密文原文:" + decryptWithSHA512Str);
    }
}

也可以調(diào)用jasypt-1.9.2.jar包中一個(gè)main方法:org.jasypt.intf.cli.JasyptPBEStringEncryptionCLI

注:jasypt2.x版本可以使用,3.x不能使用

找到maven倉(cāng)庫(kù)中的 jasypt-1.9.2.jar(路徑是:xxx\repository\org\jasypt\jasypt\1.9.2)

java -cp jasypt-1.9.2.jar  org.jasypt.intf.cli.JasyptPBEStringEncryptionCLI input="test" password=salt algorithm=PBEWithMD5AndDES
  • -- input參數(shù):你想要加密的密碼
  • -- password參數(shù):jasypt用來加密你的密碼的密碼
  • -- algorithm加密方式:使用默認(rèn)就好了

結(jié)果如下圖,途中的output就是加密后的密文了。

3. 修改配置文件,把配置文件中要加密的字段改為:ENC(密文)

yml中添加

system:
  mysql:
    url: xxx.xxx.xx.xx
    username: username
    password: ENC(EM4fA1YBhd8OTcdl93w2QQ==)

jasypt:
  encryptor:
    password: salt

那么新的問題又來了,你把密碼鹽放在配置文件中,這些密碼加密就相當(dāng)于沒加密

5、將加密密鑰作為啟動(dòng)運(yùn)行參數(shù)

以上我們的密鑰也是保存在配置文件中的,一旦密鑰泄露,信息被解密,安全隱患依然存在!

因此我們可以通過將密鑰設(shè)置為程序啟動(dòng)時(shí)的參數(shù)來避免?。?!

java -Djasypt.encryptor.password=salt -jar test.jar

idea中如下配置運(yùn)行:

總結(jié)

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Liquibase 在 Spring Boot 中的使用詳細(xì)介紹

    Liquibase 在 Spring Boot 中的使用詳細(xì)介紹

    Liquibase 提供了靈活的變更集機(jī)制,支持創(chuàng)建表、修改列、填充數(shù)據(jù)、回滾變更等多種操作,本文將通過多個(gè)豐富的示例,詳細(xì)講解如何在 Spring Boot項(xiàng)目中使用 Liquibase,感興趣的朋友跟隨小編一起看看吧
    2024-12-12
  • 詳解Mybatis內(nèi)的mapper方法為何不能重載

    詳解Mybatis內(nèi)的mapper方法為何不能重載

    這篇文章主要介紹了詳解Mybatis內(nèi)的mapper方法為何不能重載,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-12-12
  • jenv實(shí)現(xiàn)mac下多版本jdk管理以及切換方式

    jenv實(shí)現(xiàn)mac下多版本jdk管理以及切換方式

    文章介紹在Mac上使用jenv管理多版本JDK的方法,包括下載安裝指定JDK版本、配置環(huán)境變量及切換操作,同時(shí)說明Maven和IDEA的JDK配置步驟,確保不同項(xiàng)目使用正確版本,涉及路徑設(shè)置、項(xiàng)目SDK及Maven參數(shù)配置
    2025-08-08
  • Java中ThreadLocal共享變量的使用

    Java中ThreadLocal共享變量的使用

    java.lang.ThreadLocal該類提供了線程局部變量,用于在當(dāng)前線程中共享數(shù)據(jù),本文主要介紹了Java中ThreadLocal共享變量的使用,具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-01-01
  • java多線程編程之Synchronized塊同步方法

    java多線程編程之Synchronized塊同步方法

    這篇文章主要介紹了java多線程編程之Synchronized塊同步方法,synchronized關(guān)鍵字又稱同步鎖,當(dāng)方法執(zhí)行完后,會(huì)自動(dòng)釋放鎖鎖,只有一個(gè)線程能進(jìn)入此方法,看看下文中各種例子對(duì)synchronized的詳細(xì)解釋
    2015-12-12
  • Java如何處理圖片保存之后變紅色的問題

    Java如何處理圖片保存之后變紅色的問題

    這篇文章主要介紹了Java如何處理圖片保存之后變紅色的問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-11-11
  • Spark Maven項(xiàng)目打包后找不到主類問題及解決

    Spark Maven項(xiàng)目打包后找不到主類問題及解決

    在使用IDEA、Maven創(chuàng)建Spark項(xiàng)目時(shí),遇到打包后Scala程序找不到主類的問題,原因是Maven缺少scala-maven-plugin插件,通過添加該插件并重新構(gòu)建項(xiàng)目,問題得到解決
    2026-02-02
  • 簡(jiǎn)單理解Java的垃圾回收機(jī)制與finalize方法的作用

    簡(jiǎn)單理解Java的垃圾回收機(jī)制與finalize方法的作用

    這篇文章主要介紹了簡(jiǎn)單理解Java的垃圾回收機(jī)制與finalize方法的作用,著重講解了Java的GC銷毀對(duì)象的過程,需要的朋友可以參考下
    2015-11-11
  • JAVA圖片水印開發(fā)案例詳解

    JAVA圖片水印開發(fā)案例詳解

    水印開發(fā)是web開發(fā)中一種比較常見的功能,實(shí)現(xiàn)的代碼很簡(jiǎn)單,這篇文章主要介紹了JAVA圖片水印開發(fā)案例,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-07-07
  • Java的List集合中泛型使用詳解

    Java的List集合中泛型使用詳解

    這篇文章主要介紹了Java的List集合中泛型使用詳解,泛型類,如果沒有指定具體的數(shù)據(jù)類型,此時(shí),操作類型是Object,泛型的類型參數(shù)只能是類類型,不能是基本數(shù)據(jù)類型,需要的朋友可以參考下
    2023-12-12

最新評(píng)論

抚松县| 饶阳县| 章丘市| 会昌县| 漳州市| 南投市| 玉门市| 吉木萨尔县| 广西| 福海县| 家居| 林州市| 和田县| 班玛县| 昌邑市| 安西县| 龙江县| 龙江县| 睢宁县| 潜山县| 晴隆县| 曲松县| 富阳市| 高密市| 叙永县| 舞钢市| 汉源县| 沧州市| 莱芜市| 札达县| 额尔古纳市| 鹤庆县| 宜川县| 垦利县| 禄劝| 岑溪市| 漳州市| 宽城| 丹江口市| 富源县| 万州区|