亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

SpringBoot3使用Jasypt實(shí)現(xiàn)配置文件信息加密的方法

 更新時(shí)間:2024年07月29日 09:16:31   作者:詩(shī)筠  
對(duì)于一些單體項(xiàng)目而言,在沒有使用SpringCloud的情況下,配置文件中包含著大量的敏感信息,如果這些信息泄露出去將會(huì)對(duì)企業(yè)的資產(chǎn)產(chǎn)生重大威脅,因此,對(duì)配置文件中的敏感信息加密是一件極其必要的事,所以本文介紹了SpringBoot3使用Jasypt實(shí)現(xiàn)配置文件信息加密的方法

前言

對(duì)于一些單體項(xiàng)目而言,在沒有使用SpringCloud的情況下,配置文件中包含著大量的敏感信息,比如數(shù)據(jù)庫(kù)的賬號(hào)密碼、API服務(wù)的秘鑰等等,如果這些信息泄露出去將會(huì)對(duì)企業(yè)的資產(chǎn)產(chǎn)生重大威脅。因此,對(duì)配置文件中的敏感信息加密是一件極其必要的事。

一、概述

1.1 Jasypt庫(kù)簡(jiǎn)介

下載 (12)

Jasypt是一個(gè)易于使用的Java庫(kù),專門用于加密和解密配置文件中的敏感信息,如數(shù)據(jù)庫(kù)憑據(jù)、API密鑰等。它提供了一種安全的方式來(lái)存儲(chǔ)和管理配置文件中的敏感數(shù)據(jù),而不是以明文形式暴露。

Jasypt支持多種加密算法,如DES、AES、Blowfish等,以及基于口令的加密算法(PBE)。它還提供了靈活的配置選項(xiàng),允許開發(fā)人員自定義加密算法、密碼、初始化向量等。

官網(wǎng):jasypt-spring-boot

1.2 Jasypt庫(kù)的主要特點(diǎn)

Jasypt的主要特點(diǎn)包括:

  • 簡(jiǎn)單易用:Jasypt提供了簡(jiǎn)單的API和注解,使得在應(yīng)用程序中集成和使用Jasypt變得非常容易。
  • 安全性高:Jasypt使用強(qiáng)加密算法來(lái)保護(hù)配置文件中的敏感信息,防止數(shù)據(jù)泄露和未授權(quán)訪問(wèn)。
  • 兼容性好:Jasypt可以與各種Java應(yīng)用程序和框架集成,包括Spring、Spring Boot、Hibernate等。

二、開發(fā)環(huán)境

  • JDK版本:JDK 17
  • Spring Boot版本:Spring Boot 3.2.2
  • MySQL版本:8.0.37
  • 構(gòu)建工具:Maven

三、Jasypt集成到SpringBoot3

3.1 引入依賴

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

3.2 配置Jasypt

jasypt:
  encryptor:
    algorithm: PBEWITHHMACSHA512ANDAES_256
    iv-generator-classname: org.jasypt.iv.RandomIvGenerator
    password: secret_key # 這里的秘鑰一般不會(huì)寫在配置文件中,為了方便理解暫時(shí)放在這里
    property:
      prefix: ENC(
      suffix: )
  • algorithm: jasypt的加密算法,這里指定加密算法為一種結(jié)合了SHA-512 HMAC和AES-256加密算法的強(qiáng)加密算法。
  • iv-generator-classname: 指定用于生成初始化向量的類。RandomIvGenerator是一個(gè)隨機(jī)生成初始化向量的生成器,它適用于需要初始化向量的加密算法,如AES。每次加密時(shí),它都會(huì)生成一個(gè)新的隨機(jī)初始化向量,增加了解密的難度。
  • password: 指定用于加密和解密的密碼。
  • property.prefix: 指定加密值的前綴。當(dāng)Jasypt處理配置文件時(shí),它會(huì)查找以這個(gè)前綴開始的屬性值,并嘗試使用配置的加密算法進(jìn)行解密。默認(rèn)值是ENC(,也可以進(jìn)行修改。
  • property.suffix: 指定加密值的后綴。與prefix類似,Jasypt會(huì)查找以這個(gè)后綴結(jié)束的屬性值進(jìn)行解密。默認(rèn)值是)。

更多配置屬性:

Key描述RequiredDefault Value
jasypt.encryptor.password用于加密和解密的密碼。這個(gè)密碼非常重要,因?yàn)樗糜谏杉用苊荑€和解密密文。True-
jasypt.encryptor.algorithm指定加密算法。默認(rèn)值是PBEWITHHMACSHA512ANDAES_256,這是一種結(jié)合了SHA-512 HMAC和AES-256加密算法的強(qiáng)加密算法。FalsePBEWITHHMACSHA512ANDAES_256
jasypt.encryptor.key-obtention-iterations指定獲取加密密鑰的迭代次數(shù)。這個(gè)值越大,獲取密鑰的過(guò)程越慢,但越安全。False1000
jasypt.encryptor.pool-size指定加密器池的大小。如果設(shè)置為大于1的值,Jasypt將使用一個(gè)線程池來(lái)并行處理加密和解密請(qǐng)求。False1
jasypt.encryptor.provider-name指定加密提供者的名稱。默認(rèn)值是SunJCE,這是Java加密擴(kuò)展(JCE)的Sun Microsystems實(shí)現(xiàn)。FalseSunJCE
jasypt.encryptor.provider-class-name指定加密提供者的類名。如果指定了這個(gè)屬性,Jasypt將使用這個(gè)類作為加密提供者,而不是默認(rèn)的SunJCE。Falsenull
jasypt.encryptor.salt-generator-classname指定用于生成鹽值的類。默認(rèn)值是org.jasypt.salt.RandomSaltGenerator,它生成一個(gè)隨機(jī)的鹽值。Falseorg.jasypt.salt.RandomSaltGenerator
jasypt.encryptor.iv-generator-classname指定用于生成初始化向量的類。默認(rèn)值是org.jasypt.iv.RandomIvGenerator,它生成一個(gè)隨機(jī)的初始化向量。Falseorg.jasypt.iv.RandomIvGenerator
jasypt.encryptor.string-output-type指定加密后的字符串輸出類型。默認(rèn)值是base64,這意味著加密后的值將轉(zhuǎn)換為Base64編碼的字符串。Falsebase64
jasypt.encryptor.proxy-property-sources指定是否代理屬性源。如果設(shè)置為true,Jasypt將代理所有的屬性源,以便在獲取屬性值時(shí)進(jìn)行解密。Falsefalse
jasypt.encryptor.skip-property-sources指定要跳過(guò)的屬性源列表。如果某些屬性源不包含敏感信息,或者您不想對(duì)它們進(jìn)行加密,可以將它們添加到這個(gè)列表中。Falseempty list

3.3 加密配置文件信息

先看一下我們現(xiàn)有的配置文件信息,我們要加密的信息是數(shù)據(jù)庫(kù)url、usernamepassword這三個(gè)屬性:

spring:
  application:
    name: server
  datasource: 
    url: jdbc:mysql://localhost:3306/study_db?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&serverTimezone=Asia/Shanghai
    driver-class-name: com.mysql.cj.jdbc.Driver
    username: root
    password: 123456

3.3.1 方案一(不推薦)

a.編寫測(cè)試類生成加密后的配置文件信息

    @Autowired
    private StringEncryptor encryptor;

    @Test
    public void encrypt() {
        String url = encryptor.encrypt("jdbc:mysql://localhost:3306/study_db?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&serverTimezone=Asia/Shanghai");
        String name = encryptor.encrypt("root");
        String password = encryptor.encrypt("123456");
        System.out.println("database url: " + url);
        System.out.println("database username: " + name);
        System.out.println("database password: " + password);
    }

b.運(yùn)行

image-20240726193839480

c.修改原本的配置文件信息

spring:
  application:
    name: server
  datasource: 
    url: ENC(z3xy2E55GmC126NvY1Mb3uprgXGjyaOWS4J3y72r1FFeTSno3m5ljGV22TqyYr85bptOY7drFHzrxaUfqbmetNWCsFY7i4vu5ig7ow0gk6ObLK/dVI4MRePxM5CGVzQ3XUWSJrUbLU1o+13g2erP2yV4uqeH6oVZH/FrBDQ6YfeeHmpl73emqMoGFFBnWdMvF1tzJxYMLcwthGBoaRopyA==)
    driver-class-name: com.mysql.cj.jdbc.Driver
    username: ENC(9oaZel6CzsIM/ws23QcX2ijvZvn8A5HBYJM4PDUvwFSqmCO26MJKKshhPE5Hi+BU)
    password: ENC(b5FqkU7mOSb0esB1qLXveDBalnUz7OtBxp0By/Q1sd5yk0cgOuJqIV2zSmqHA5mz)

再次運(yùn)行和測(cè)試:

image-20240726194120745

測(cè)試的接口是我隨便寫的一個(gè)接口,實(shí)現(xiàn)的功能就是根據(jù)用戶名查詢數(shù)據(jù)庫(kù)中的一個(gè)用戶:

    @Operation(summary = "你好")
    @GetMapping("/hello")
    public Result<UserInfo> test2(String username) {
        List<UserInfo> userList = userInfoService.lambdaQuery().like(UserInfo::getUserName, username).list();
        return Result.success(userList.get(0));
    }

可以看到成功查詢到了用戶信息,說(shuō)明數(shù)據(jù)庫(kù)連接成功。

但這種方案有個(gè)問(wèn)題,秘鑰寫在配置文件當(dāng)中,一旦代碼泄露,那別人就可以使用秘鑰解密我們的密文,因此可以采取方案二。

3.3.2 方案二(推薦)

官方文檔:https://github.com/ulisesbocchio/jasypt-spring-boot#maven-plugin

a.添加Maven 插件

    <build>
        <plugins>
            <plugin>
                <groupId>com.github.ulisesbocchio</groupId>
                <artifactId>jasypt-maven-plugin</artifactId>
                <version>3.0.5</version>
                <configuration>
                    <path>file:src/main/resources/application.yaml</path>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

使用此插件時(shí),提供加密密碼的最簡(jiǎn)單方法是通過(guò)系統(tǒng)屬性,即 -Djasypt.encryptor.password=“密碼”。

默認(rèn)情況下,插件會(huì)在./src/main/resources下的Spring Boot配置文件application. properties中加密配置,但我們用的一般都是yaml文件,因此修改一下即可。

記得一定要加spring-boot-maven-plugin依賴(ps:本人之前cv了依賴代碼忘記cv構(gòu)建代碼導(dǎo)致一直報(bào)錯(cuò))。

b.修改配置文件

spring:
  application:
    name: server
  datasource:
    url: ENC(jdbc:mysql://localhost:3306/study_db?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&serverTimezone=Asia/Shanghai)
    driver-class-name: com.mysql.cj.jdbc.Driver
    username: ENC(root)
    password: ENC(123456)
jasypt:
  encryptor:
    algorithm: PBEWITHHMACSHA512ANDAES_256
    iv-generator-classname: org.jasypt.iv.RandomIvGenerator
    property:
      prefix: ENC(
      suffix: )

c.運(yùn)行如下maven命令:

如果采用的是多模塊開發(fā),記得選擇模塊

image-20240726215037612

mvn jasypt:encrypt -Djasypt.encryptor.password=secret_key

d.打包項(xiàng)目

image-20240726215253282

e.運(yùn)行jar包

轉(zhuǎn)到target目錄用命令行運(yùn)行下面的命令

java -jar xxx.jar --jasypt.encryptor.password=secret_key

f.測(cè)試

image-20240726215611607

四、總結(jié)

本文介紹了在SpringBoot3項(xiàng)目中集成Jasypt實(shí)現(xiàn)配置文件信息加密的方法。Jasypt不僅可以用來(lái)加密數(shù)據(jù)庫(kù)用戶名、密碼,還可以用來(lái)加密API秘鑰等等敏感信息,只需要添加一個(gè)加密前綴和綴就可以輕松實(shí)現(xiàn)配置信息加密,希望對(duì)大家有所幫助。

以上就是SpringBoot3使用Jasypt實(shí)現(xiàn)配置文件信息加密的方法的詳細(xì)內(nèi)容,更多關(guān)于SpringBoot3 Jasypt文件加密的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

最新評(píng)論