欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

前言

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

一、概述

1.1 Jasypt庫簡介

下載 (12)

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

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

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

1.2 Jasypt庫的主要特點

Jasypt的主要特點包括:

  • 簡單易用:Jasypt提供了簡單的API和注解,使得在應(yīng)用程序中集成和使用Jasypt變得非常容易。
  • 安全性高:Jasypt使用強加密算法來保護配置文件中的敏感信息,防止數(shù)據(jù)泄露和未授權(quá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 # 這里的秘鑰一般不會寫在配置文件中,為了方便理解暫時放在這里
    property:
      prefix: ENC(
      suffix: )
  • algorithm: jasypt的加密算法,這里指定加密算法為一種結(jié)合了SHA-512 HMAC和AES-256加密算法的強加密算法。
  • iv-generator-classname: 指定用于生成初始化向量的類。RandomIvGenerator是一個隨機生成初始化向量的生成器,它適用于需要初始化向量的加密算法,如AES。每次加密時,它都會生成一個新的隨機初始化向量,增加了解密的難度。
  • password: 指定用于加密和解密的密碼。
  • property.prefix: 指定加密值的前綴。當Jasypt處理配置文件時,它會查找以這個前綴開始的屬性值,并嘗試使用配置的加密算法進行解密。默認值是ENC(,也可以進行修改。
  • property.suffix: 指定加密值的后綴。與prefix類似,Jasypt會查找以這個后綴結(jié)束的屬性值進行解密。默認值是)。

更多配置屬性:

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

3.3 加密配置文件信息

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

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.編寫測試類生成加密后的配置文件信息

    @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.運行

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)

再次運行和測試:

image-20240726194120745

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

    @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));
    }

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

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

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>

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

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

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

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.運行如下maven命令:

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

image-20240726215037612

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

d.打包項目

image-20240726215253282

e.運行jar包

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

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

f.測試

image-20240726215611607

四、總結(jié)

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

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

相關(guān)文章

最新評論