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

Springboot整合Jasypt對(duì)配置文件中的密碼加密的步驟

 更新時(shí)間:2025年09月10日 15:23:06   作者:飽飽要堅(jiān)持可持續(xù)發(fā)展觀  
本文給大家介紹Springboot整合Jasypt對(duì)配置文件中的密碼加密的步驟,本文結(jié)合實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧

1. 添加依賴

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

2. 添加jasypt配置

jasypt:
  encryptor:
    # 鹽值
    password: 123
    # 指定加密方式
    algorithm: PBEWithMD5AndDES
    iv-generator-classname: org.jasypt.iv.NoIvGenerator
    property:
      # 標(biāo)識(shí)為加密屬性的前綴
      prefix: ENC(
      # 標(biāo)識(shí)為加密屬性的后綴
      suffix: )

3. 編寫加/解密工具類

public class JasyptUtil {
    /**
     * PBE 算法
     */
    public static final String PBE_ALGORITHMS_MD5_DES = "PBEWITHMD5ANDDES";
    public static final String PBE_ALGORITHMS_MD5_TRIPLEDES = "PBEWITHMD5ANDTRIPLEDES";
    public static final String PBE_ALGORITHMS_SHA1_DESEDE = "PBEWITHSHA1ANDDESEDE";
    public static final String PBE_ALGORITHMS_SHA1_RC2_40 = "PBEWITHSHA1ANDRC2_40";
    private JasyptUtil() {
    }
    /**
     * Jasypt 加密
     *
     * @param encryptedStr 加密字符串
     * @param password     鹽值
     * @return
     */
    public static String encrypt(String encryptedStr, String password) {
        return encrypt(encryptedStr, PBE_ALGORITHMS_MD5_DES, password);
    }
    /**
     * Jasypt 加密
     *
     * @param encryptedStr 加密字符串
     * @param algorithm    加密算法
     *                     PBE ALGORITHMS: [PBEWITHMD5ANDDES, PBEWITHMD5ANDTRIPLEDES, PBEWITHSHA1ANDDESEDE, PBEWITHSHA1ANDRC2_40]
     * @param password     鹽值
     * @return
     */
    public static String encrypt(String encryptedStr, String algorithm, String password) {
        // StandardPBEStringEncryptor、StandardPBEBigDecimalEncryptor、StandardPBEBigIntegerEncryptor、StandardPBEByteEncryptor
        StandardPBEStringEncryptor encryptor = new StandardPBEStringEncryptor();
        EnvironmentPBEConfig config = new EnvironmentPBEConfig();
        // 指定加密算法
        config.setAlgorithm(algorithm);
        // 加密鹽值
        config.setPassword(password);
        //config.setIvGeneratorClassName("org.jasypt.iv.NoIvGenerator");
        encryptor.setConfig(config);
        // 加密
        return encryptor.encrypt(encryptedStr);
    }
    /**
     * Jasypt 解密
     *
     * @param decryptStr 解密字符串
     * @param password   鹽值
     * @return
     */
    public static String decrypt(String decryptStr, String password) {
        return decrypt(decryptStr, PBE_ALGORITHMS_MD5_DES, password);
    }
    /**
     * Jasypt 解密
     *
     * @param decryptStr 解密字符串
     * @param algorithm  指定解密算法:解密算法要與加密算法一一對(duì)應(yīng)
     *                   PBE ALGORITHMS: [PBEWITHMD5ANDDES, PBEWITHMD5ANDTRIPLEDES, PBEWITHSHA1ANDDESEDE, PBEWITHSHA1ANDRC2_40]
     * @param password   鹽值
     * @return
     */
    public static String decrypt(String decryptStr, String algorithm, String password) {
        // StandardPBEStringEncryptor、StandardPBEBigDecimalEncryptor、StandardPBEBigIntegerEncryptor、StandardPBEByteEncryptor
        StandardPBEStringEncryptor encryptor = new StandardPBEStringEncryptor();
        EnvironmentPBEConfig config = new EnvironmentPBEConfig();
        // 指定解密算法:解密算法要與加密算法一一對(duì)應(yīng)
        config.setAlgorithm(algorithm);
        // 加密秘鑰
        config.setPassword(password);
        //config.setIvGeneratorClassName("org.jasypt.iv.NoIvGenerator");
        encryptor.setConfig(config);
        // 解密
        return encryptor.decrypt(decryptStr);
    }
    public static void main(String[] args) {
                System.out.println("Supported PBE Algorithms: " + AlgorithmRegistry.getAllPBEAlgorithms());
        String encryptedStr = "I am the string to be encrypted";
        String algorithm = PBE_ALGORITHMS_SHA1_RC2_40;
        String password = "salt";
        String str = JasyptUtil.encrypt(encryptedStr, algorithm, password);
        System.out.println("加密后的字符串:" + str);
        System.out.println("解密后的字符串:" + JasyptUtil.decrypt(str, algorithm, password));
    }
}

4. 修改配置文件

通過編寫加/解密工具類得到對(duì)應(yīng)的加密結(jié)果,然后將配置文件的原始明文密碼替換成上一步對(duì)應(yīng)的結(jié)果,并通過 ENC(加密結(jié)果) 包裹起來。

5. 進(jìn)一步防止密碼泄露

在上面的內(nèi)容中,使用的是默認(rèn)的加密規(guī)則,這一點(diǎn)會(huì)讓當(dāng)自定義加密鹽值(jasypt.encryptor.password) 泄漏時(shí)可能變得不安全。那么如何進(jìn)一步防止密碼泄露安全呢?

5.1 自定義加密器

為了進(jìn)一步防止密碼泄露,我們可以自定義加密規(guī)則。

自定義加密規(guī)則非常簡(jiǎn)單,只需要提供自定義的加密器配置類,然后通過jasypt.encryptor.bean配置指定加密配置類即可。

/**
 * 自定義加密器
 */
public class MyStringEncryptor impements StringEncryptor {
    /**
     * 加解密PBE 算法
     */
    public static final String PBE_ALGORITHMS_MD5_DES = "PBEWITHMD5ANDDES";
    public static final String PBE_ALGORITHMS_MD5_TRIPLEDES = "PBEWITHMD5ANDTRIPLEDES";
    public static final String PBE_ALGORITHMS_SHA1_DESEDE = "PBEWITHSHA1ANDDESEDE";
    public static final String PBE_ALGORITHMS_SHA1_RC2_40 = "PBEWITHSHA1ANDRC2_40";
    /**
     * 加解密鹽值
     */
    private String password;
    /**
     * 加解密算法
     */
    private String algorithm = PBE_ALGORITHMS_MD5_DES;
    public MyStringEncryptor(String password) {
        this.password = password;
    }
    public MyStringEncryptor(String password, String algorithm) {
        this.password = password;
        this.algorithm = algorithm;
    }
    @Override
    public String encrypt(String message) {
        PooledPBEStringEncryptor encryptor = new PooledPBEStringEncryptor();
        // 加解密鹽值
        encryptor.setConfig(getConfig(this.password));
        return encryptor.encrypt(message);
    }
    @Override
    public String decrypt(String encryptedMessage) {
        PooledPBEStringEncryptor encryptor = new PooledPBEStringEncryptor();
        encryptor.setConfig(getConfig(this.password));
        return encryptor.decrypt(encryptedMessage);
    }
    public SimpleStringPBEConfig getConfig(String password) {
        SimpleStringPBEConfig config = new SimpleStringPBEConfig();
        // 加密鹽值
        config.setPassword(password);
        // 加解密算法
        config.setAlgorithm(PBE_ALGORITHMS_MD5_DES);
        // 設(shè)置密鑰獲取迭代次數(shù)
        config.setKeyObtentionIterations(1000);
        // 線程池大?。耗J(rèn)1
        config.setPoolSize(1);
        // 鹽值生成器className
        config.setSaltGeneratorClassName("org.jasypt.salt.RandomSaltGenerator");
        //  iv(initialization vector,初始化向量) 生成器className
        config.setIvGeneratorClassName("org.jasypt.iv.NoIvGenerator");
        // 設(shè)置字符串輸出類型
        config.setStringOutputType("base64");
        return config;
    }
}

5.2 將自定義加密器添加到 Spring IOC容器中。

@Configuration
public class JasyptConfig {
    /**
     * 加解密鹽值
     */
    @Value("${jasypt.encryptor.password}")
    private String password;
    // @Bean("jasyptStringEncryptor")
    @Bean("myStringEncryptor")
    public StringEncryptor myStringEncryptor() {
        return new MyStringEncryptor(password);
    }
}

5.3修改配置文件

jasypt:
  encryptor:
    # 指定加解密在spring ioc容器中bean的名稱,默認(rèn) jasyptStringEncryptor
    bean: myStringEncryptor
    # 鹽值
    password: 123

注意:Jasypt默認(rèn)加解密器beanName為jasyptStringEncryptor,如果不想在配置文件中指定自定義加密器名稱,需將自定義加密器beanName設(shè)置為jasyptStringEncryptor,否則將不生效。

6. 加密鹽值通過環(huán)境變量指定

  • 方式一:直接作為程序啟動(dòng)時(shí)的命令行參數(shù)
java -jar app.jar --jasypt.encryptor.password=salt
  • 方式二:直接作為程序啟動(dòng)時(shí)的應(yīng)用環(huán)境變量
java -Djasypt.encryptor.password=salt -jar app.jar
  • 方式三:直接作為系統(tǒng)環(huán)境變量
  1. 設(shè)置系統(tǒng)環(huán)境變量 vim /etc/profile
JASYPT_ENCRYPTOR_PASSWORD = salt

直接生效 source /etc/profile
2. Spring Boot的項(xiàng)目配置文件指定系統(tǒng)環(huán)境變量

jasypt.encryptor.password=${JASYPT_ENCRYPTOR_PASSWORD:}

到此這篇關(guān)于Springboot整合Jasypt對(duì)配置文件中的密碼加密的步驟的文章就介紹到這了,更多相關(guān)Springboot Jasypt配置文件密碼加密內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Springboot實(shí)例講解實(shí)現(xiàn)寵物醫(yī)院管理系統(tǒng)流程

    Springboot實(shí)例講解實(shí)現(xiàn)寵物醫(yī)院管理系統(tǒng)流程

    讀萬卷書不如行萬里路,只學(xué)書上的理論是遠(yuǎn)遠(yuǎn)不夠的,只有在實(shí)戰(zhàn)中才能獲得能力的提升,本篇文章手把手帶你用Springboot實(shí)現(xiàn)寵物醫(yī)院綜合管理系統(tǒng),大家可以在過程中查缺補(bǔ)漏,提升水平
    2022-06-06
  • 在SpringBoot中通過@Value注入Map和List并使用YAML配置的詳細(xì)教程

    在SpringBoot中通過@Value注入Map和List并使用YAML配置的詳細(xì)教程

    在SpringBoot開發(fā)中,我們經(jīng)常需要從配置文件中讀取各種參數(shù),對(duì)于簡(jiǎn)單的字符串或數(shù)值,直接使用@Value注解就可以了,但當(dāng)我們需要注入更復(fù)雜的數(shù)據(jù)結(jié)構(gòu),比如Map或者List時(shí),所以本文小編給大家介紹在SpringBoot中通過@Value注入Map和List并使用YAML配置的詳細(xì)教程
    2025-04-04
  • sqlmap 使用教程(從入門到進(jìn)階)

    sqlmap 使用教程(從入門到進(jìn)階)

    sqlmap是一款強(qiáng)大的開源 SQL 注入自動(dòng)化測(cè)試工具,支持識(shí)別并利用多種類型的 SQL 注入漏洞(Boolean-based、Time-based、Error-based、Stacked Queries 等),本文給大家介紹sqlmap使用教程,感興趣的朋友一起看看吧
    2016-11-11
  • Java springboot Mongodb增刪改查代碼實(shí)例

    Java springboot Mongodb增刪改查代碼實(shí)例

    這篇文章主要介紹了Java springboot Mongodb增刪改查代碼實(shí)例,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-07-07
  • 使用java數(shù)組 封裝自己的數(shù)組操作示例

    使用java數(shù)組 封裝自己的數(shù)組操作示例

    這篇文章主要介紹了使用java數(shù)組 封裝自己的數(shù)組操作,結(jié)合實(shí)例形式分析了java數(shù)組索引、遍歷等相關(guān)封裝操作技巧與注意事項(xiàng),需要的朋友可以參考下
    2020-03-03
  • Redis?command?timed?out兩種異常情況的解決方式

    Redis?command?timed?out兩種異常情況的解決方式

    Redis是我們開發(fā)中常用的數(shù)據(jù)庫,下面這篇文章主要給大家介紹了關(guān)于Redis?command?timed?out兩種異常情況的解決方式,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-04-04
  • SpringBoot集成消息隊(duì)列的項(xiàng)目實(shí)踐

    SpringBoot集成消息隊(duì)列的項(xiàng)目實(shí)踐

    本文主要介紹了SpringBoot集成消息隊(duì)列的項(xiàng)目實(shí)踐,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2024-02-02
  • 使用Java如何將圖片轉(zhuǎn)成Base64編碼,并壓縮至40k

    使用Java如何將圖片轉(zhuǎn)成Base64編碼,并壓縮至40k

    這篇文章主要介紹了使用Java如何將圖片轉(zhuǎn)成Base64編碼,并壓縮至40k問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-06-06
  • 詳解Maven項(xiàng)目缺少M(fèi)aven Dependencies解決方法總結(jié)

    詳解Maven項(xiàng)目缺少M(fèi)aven Dependencies解決方法總結(jié)

    這篇文章主要介紹了詳解Maven項(xiàng)目缺少M(fèi)aven Dependencies解決方法總結(jié),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-11-11
  • Java入門案列之猜拳小游戲

    Java入門案列之猜拳小游戲

    這篇文章主要為大家詳細(xì)介紹了Java入門案列之猜拳小游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-11-11

最新評(píng)論

长丰县| 石城县| 封开县| 延庆县| 安丘市| 石首市| 霍山县| 富蕴县| 南漳县| 淅川县| 永胜县| 临朐县| 南雄市| 云龙县| 西藏| 海林市| 大姚县| 万山特区| 阳西县| 九寨沟县| 聂荣县| 富裕县| 丹凤县| 大新县| 铜鼓县| 佛学| 玉龙| 天全县| 腾冲县| 东乌珠穆沁旗| 阿城市| 公主岭市| 同心县| 涟水县| 汉川市| 江口县| 洛南县| 哈尔滨市| 桃园县| 南皮县| 新蔡县|