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

SpringBoot+ENC實現(xiàn)密鑰加密的使用示例

 更新時間:2024年07月29日 09:40:39   作者:一恍過去  
本文主要介紹了SpringBoot+ENC實現(xiàn)密鑰加密的使用示例,主要是為了將配置信息從應(yīng)用程序代碼中分離出來,以提高安全性和可維護性,感興趣的可以了解一下

前言

Spring Boot中使用ENC(Environment-Neutral Configuration)主要是為了將配置信息從應(yīng)用程序代碼中分離出來,以提高安全性和可維護性。ENC的主要優(yōu)點包括:

  • 安全性增強: 敏感信息(如數(shù)據(jù)庫密碼、API密鑰等)不應(yīng)硬編碼在代碼中,而是應(yīng)該使用加密的方式存儲在配置文件中,然后通過ENC進行解密和使用,從而減少泄露風(fēng)險。
  • 可維護性: 將配置信息與代碼分離,使得配置可以獨立地修改和管理,而不需要重新編譯和部署應(yīng)用程序。這樣可以降低維護成本,并使應(yīng)用程序更易于管理。
  • 靈活性: 使用ENC可以根據(jù)不同的環(huán)境(開發(fā)、測試、生產(chǎn)等)提供不同的配置,而不需要修改應(yīng)用程序代碼,從而提高了部署的靈活性和可移植性。

1、整合SpringBoot

1.1、POM

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

1.2、加密鹽值配置

整合SpringBoot時,鹽值的配置最好式寫到配置中心的文件中,鹽值寫到本地文件,泄露后也容易被進行解密

jasypt:
  encryptor:
  	# password值任意,最好隨機字符
    password: hhX4FzbwcT

1.3、工具類使用

使用工具類對需要處理的明文數(shù)據(jù)進行加密處理,再將加密結(jié)果寫入到配置文件中

注意:工具類使用完成后,應(yīng)該刪除加密鹽

import org.jasypt.encryption.pbe.StandardPBEStringEncryptor;

public class JasyptTest {

    /**
     * 加密鹽值,使用完成后進行刪除,或者不能提交到`生產(chǎn)環(huán)境`,比如:
     */
    private final static String PASSWORD = "hhX4FzbwcT";


    public static void main(String[] args) {

        PooledPBEStringEncryptor encryptor = new PooledPBEStringEncryptor();

        SimpleStringPBEConfig config = new SimpleStringPBEConfig();
        // 用于設(shè)置加密密鑰。密鑰是用于加密和解密字符串的關(guān)鍵信息。
        config.setPassword(PASSWORD);
        // 加密算法的名稱,jasypt-3.0.5版本后默認的加密方式
        config.setAlgorithm("PBEWITHHMACSHA512ANDAES_256");
        // 用于設(shè)置加密時迭代次數(shù)的數(shù)量,增加迭代次數(shù)可以使攻擊者更難進行密碼破解。
        config.setKeyObtentionIterations("1000");
        // 加密器池的大小。池是一組加密器實例,可確保加密操作的并發(fā)性。
        config.setPoolSize("1");
        // 用于設(shè)置JCE(Java Cryptography Extension)提供程序的名稱。
        config.setProviderName("SunJCE");
        // 用于設(shè)置生成鹽的類名稱。在此配置中,我們使用了org.jasypt.salt.RandomSaltGenerator,表示使用隨機生成的鹽。
        config.setSaltGeneratorClassName("org.jasypt.salt.RandomSaltGenerator");
        // 用于設(shè)置Jasypt使用的初始化向量(IV)生成器的類名。初始化向量是在加密過程中使用的一個固定長度的隨機數(shù),用于加密數(shù)據(jù)塊,使每個數(shù)據(jù)塊的加密結(jié)果都是唯一的。在此配置中,我們使用了org.jasypt.iv.RandomIvGenerator類,該類是一個隨機生成器,用于生成實時隨機IV的實例。這樣可以確保每次加密的IV都是唯一的,從而增加加密強度。
        config.setIvGeneratorClassName("org.jasypt.iv.RandomIvGenerator");
        // 指定加密輸出類型。在此配置中,我們選擇了base64輸出類型。
        config.setStringOutputType("base64");
        encryptor.setConfig(config);

        // 明文1
        String name_encrypt = "root";
        // 明文2
        String password_encrypt = "123456";

        // 明文加密
        String encrypt1 = encryptor.encrypt(name_encrypt);
        String encrypt2 = encryptor.encrypt(password_encrypt);
        System.out.println("明文加密1:" + encrypt1);
        System.out.println("明文加密2:" + encrypt2);

        // 密文解密
        String decrypt1 = encryptor.decrypt(encrypt1);
        String decrypt2 = encryptor.decrypt(encrypt2);
        System.out.println("密文解密1:" + decrypt1);
        System.out.println("密文解密2:" + decrypt2);
    }
}

在這里插入圖片描述

1.4、加密配置使用

YAML:

sys:
 name: ENC(Yt36hceu3xGXEzrz2jCPjvalaXQ5yIHE04SVT6lIkcktrxqtBZrlivkAkA9/9oZ2)
 password: ENC(0Ci6irPOko9IG+hBZJAGoguIuE52gF/XiigCV4DwLm6NfkoyvV4Etgc9FzKK3MYl)

1.5、測試

項目成功啟動,Yaml中設(shè)置密文文本,Controller正常打印明文信息,就表示ENC配置成功了

@RestController
public class TestController {

    @Value("${sys.name}")
    private String name;

    @Value("${sys.password}")
    private String password;

    @GetMapping("/test")
    public void test() {
        System.out.println("name = " + name);
        System.out.println("password = " + password);
    }
}

2、ENC加載原理

1、在jasypt-spring-boot-starter包的自動配置類JasyptSpringBootAutoConfiguration中通過@Import注解引入了EnableEncryptablePropertiesConfiguration配置類,該類中environment參數(shù)儲存了yaml文件元數(shù)據(jù);

2、在postProcessBeanFactory方法中,調(diào)用environment.getPropertySources()方法獲取yaml配置項目;

在這里插入圖片描述

3、通過convertPropertySources進行數(shù)據(jù)轉(zhuǎn)換,修改yaml中配置項值,具體實現(xiàn)為調(diào)用instantiatePropertySource()方法,在該方法中,匹配propertySource instanceof MapPropertySource,轉(zhuǎn)化為EncryptableMapPropertySourceWrapper對象;

在這里插入圖片描述

在這里插入圖片描述

在這里插入圖片描述

在這里插入圖片描述

在這里插入圖片描述

4、EncryptableMapPropertySourceWapper類中,通過getProperty(name)方法進行匹配,匹配成功后調(diào)用resolver.resolvePropertyValue進行ENC配置的解密并且替換原有的propertySource值;

在這里插入圖片描述

到此這篇關(guān)于SpringBoot+ENC實現(xiàn)密鑰加密的使用示例的文章就介紹到這了,更多相關(guān)SpringBoot ENC密鑰加密內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • SpringBoot實現(xiàn)圖形驗證碼的示例代碼

    SpringBoot實現(xiàn)圖形驗證碼的示例代碼

    驗證碼的實現(xiàn)方式有很多,可以由前端實現(xiàn),也可以由后端進行實現(xiàn),也有很多的插件和工具包可以使用,在這里,我們使用 Hutool 提供的小工具實現(xiàn),本文介紹SpringBoot實現(xiàn)圖形驗證碼的實例,感興趣的朋友跟隨小編一起看看吧
    2025-12-12
  • 流式圖表拒絕增刪改查之kafka核心消費邏輯上篇

    流式圖表拒絕增刪改查之kafka核心消費邏輯上篇

    這篇文章主要為大家介紹了流式圖表拒絕增刪改查之kafka核心消費邏輯詳解的上篇,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-04-04
  • SpringBoot統(tǒng)一返回格式的方法詳解

    SpringBoot統(tǒng)一返回格式的方法詳解

    今天小編主要是和大家分享一個讓代碼變得更簡潔的小技巧:統(tǒng)一返回格式,文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2022-08-08
  • idea不使用maven如何將項目打包

    idea不使用maven如何將項目打包

    使用IDEA 2021版本,不借助Maven進行打WAR包的步驟是:首先點擊Project Structure,然后點擊Artifacts,接著選擇需要的打包類型,設(shè)置好包的名稱,最后進行打包,這種方法適用于不使用Maven進行項目管理的情況
    2024-09-09
  • Java 調(diào)用Restful API接口的幾種方式(HTTPS)

    Java 調(diào)用Restful API接口的幾種方式(HTTPS)

    這篇文章主要介紹了Java 調(diào)用Restful API接口的幾種方式(HTTPS),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-02-02
  • SpringBoot3實現(xiàn)優(yōu)雅停機的完整流程

    SpringBoot3實現(xiàn)優(yōu)雅停機的完整流程

    在現(xiàn)代微服務(wù)架構(gòu)中,優(yōu)雅停機(Graceful Shutdown)是一項重要功能,可以確保服務(wù)在關(guān)閉時處理完所有當(dāng)前請求,避免突然終止連接或丟失數(shù)據(jù),Spring Boot 3 提供了對優(yōu)雅停機的內(nèi)置支持,本文給大家介紹了SpringBoot3怎樣優(yōu)雅停機,需要的朋友可以參考下
    2024-10-10
  • 修改Maven settings.xml 后配置未生效的解決

    修改Maven settings.xml 后配置未生效的解決

    這篇文章主要介紹了修改Maven settings.xml 后配置未生效的解決,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-10-10
  • Java實現(xiàn)數(shù)組反轉(zhuǎn)翻轉(zhuǎn)的方法實例

    Java實現(xiàn)數(shù)組反轉(zhuǎn)翻轉(zhuǎn)的方法實例

    本篇文章主要介紹了Java實現(xiàn)數(shù)組反轉(zhuǎn)翻轉(zhuǎn)的方法實例,詳細的介紹了3種實現(xiàn)方法,有興趣的可以了解一下。
    2017-04-04
  • Java中把一個文件夾下的所有文件復(fù)制到另一個文件夾的完整實現(xiàn)方案

    Java中把一個文件夾下的所有文件復(fù)制到另一個文件夾的完整實現(xiàn)方案

    這篇文章主要介紹了如何使用Java原生API實現(xiàn)文件夾復(fù)制,支持多級目錄、空文件夾和文件覆蓋等場景,并提供了基于File和FileChannel的實現(xiàn)方案,此外,還介紹了使用Java 7的Files工具類進行簡化實現(xiàn),需要的朋友可以參考下
    2026-01-01
  • JavaWeb中的Filter過濾器解讀

    JavaWeb中的Filter過濾器解讀

    這篇文章主要介紹了JavaWeb中的Filter過濾器解讀,Filter過濾器是JavaWeb的三大組件之一,Filter過濾器是JavaEE的規(guī)范也就是接口,Filter的作用是攔截請求,過濾響應(yīng),需要的朋友可以參考下
    2023-10-10

最新評論

屏边| 馆陶县| 东乌| 东明县| 平江县| 南京市| 威信县| 原阳县| 区。| 剑川县| 通州区| 龙南县| 湘潭市| 济南市| 武夷山市| 泰顺县| 万盛区| 南岸区| 舟山市| 新建县| 化德县| 邵武市| 容城县| 丹凤县| 普定县| 南阳市| 蓬莱市| 孟连| 黄平县| 肇东市| 神木县| 泸州市| 沁阳市| 海晏县| 双峰县| 长垣县| 子长县| 新乡县| 六盘水市| 广昌县| 扎鲁特旗|