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

SpringBoot使用Jasypt對(duì)YML文件配置內(nèi)容加密的方法(數(shù)據(jù)庫(kù)密碼加密)

 更新時(shí)間:2025年03月01日 11:06:43   作者:漫天轉(zhuǎn)悠  
本文介紹了如何在SpringBoot項(xiàng)目中使用Jasypt對(duì)application.yml文件中的敏感信息(如數(shù)據(jù)庫(kù)密碼)進(jìn)行加密,通過(guò)引入Jasypt依賴、配置加密密鑰、加密敏感信息并測(cè)試解密功能,可以提高配置文件的安全性,減少因配置文件泄露導(dǎo)致的安全風(fēng)險(xiǎn),感興趣的朋友一起看看吧

SpringBoot使用Jasypt對(duì)YML文件配置內(nèi)容進(jìn)行加密(例:數(shù)據(jù)庫(kù)密碼加密)

前言

在SpringBoot的項(xiàng)目開(kāi)發(fā)中,大多數(shù)情況下 yml 配置文件中存儲(chǔ)的密碼均以明文形式展示,這種方式顯然存在較大的安全隱患。一旦有開(kāi)發(fā)人員離職,其可能會(huì)利用掌握的密碼信息進(jìn)行不當(dāng)操作,從而對(duì)系統(tǒng)安全造成威脅。因此,為了提升系統(tǒng)的安全性,我們有必要對(duì)配置文件中的敏感信息(如密碼)進(jìn)行加密處理。

通過(guò)加密,只有特定的人員(例如領(lǐng)導(dǎo)、架構(gòu)師或技術(shù)經(jīng)理)知曉解密所需的密鑰,而普通開(kāi)發(fā)人員無(wú)法直接獲取到明文密碼。這樣不僅可以有效降低因密碼泄露帶來(lái)的風(fēng)險(xiǎn),還能更好地保護(hù)系統(tǒng)的敏感數(shù)據(jù),確保信息安全可控。這一措施不僅符合最佳安全實(shí)踐,也是企業(yè)安全管理的重要一環(huán)。

一、Jasypt 簡(jiǎn)介

Jasypt 是一個(gè)用于 Java 的簡(jiǎn)易加密庫(kù),它允許開(kāi)發(fā)者以最小的努力為項(xiàng)目添加基本的加密功能,而無(wú)需深入了解密碼學(xué)的工作原理。Jasypt 提供了多種加密算法,并且可以與 Spring Boot 無(wú)縫集成,使得開(kāi)發(fā)者能夠輕松地對(duì)配置文件中的敏感信息進(jìn)行加密。

二、環(huán)境準(zhǔn)備

在開(kāi)始之前,請(qǐng)確保已經(jīng)安裝并配置好了以下工具和環(huán)境:

  • JDK 8 或更高版本
  • Maven 或 Gradle 構(gòu)建工具
  • IntelliJ IDEA 或其他 IDE
  • Spring Boot 項(xiàng)目

三、步驟詳解

1. 引入 Jasypt 依賴

pom.xml 文件中添加 Jasypt 的依賴:

<!-- jasypt 加解密-->
<dependency>
    <groupId>com.github.ulisesbocchio</groupId>
    <artifactId>jasypt-spring-boot-starter</artifactId>
    <version>2.1.2</version>
</dependency>

注意:如果你使用的是 JDK 8,請(qǐng)確保選擇適合的 Jasypt 版本(通常是 2.x),而對(duì)于 JDK 9 及以上版本,則應(yīng)選擇 3.x 版本。

2. 配置秘鑰與測(cè)試

為了保證安全性,我們需要設(shè)置一個(gè)加密密鑰,該密鑰將用于加密和解密敏感信息。
接下來(lái),我們需要對(duì)敏感信息(如數(shù)據(jù)庫(kù)密碼)進(jìn)行加密。可以通過(guò)編寫(xiě)一個(gè)簡(jiǎn)單的工具類來(lái)完成這一任務(wù)。

import org.jasypt.encryption.pbe.StandardPBEStringEncryptor;
import org.jasypt.encryption.pbe.config.EnvironmentPBEConfig;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;
@SpringBootTest
public class JasyptTest {
    @Test
    public void testPwdEncrypt() {
        // 實(shí)例化加密器
        StandardPBEStringEncryptor encryptor = new StandardPBEStringEncryptor();
        // 配置加密算法和秘鑰
        EnvironmentPBEConfig config = new EnvironmentPBEConfig();
        config.setAlgorithm("PBEWithMD5AndDES");    // 設(shè)置加密算法,默認(rèn)的
        config.setPassword("lvdamao");      // 用于加密的秘鑰(鹽),可以是隨機(jī)字符串,一定要記住并且存儲(chǔ)好
        encryptor.setConfig(config);
        // 對(duì)自己的密碼進(jìn)行加密
        String myPwd = "huang3978850";
        String encryptedPwd = encryptor.encrypt(myPwd);
        System.out.println("++++++++++++++++++++++++++++++");
        System.out.println("+ 原密碼為:" + myPwd);
        System.out.println("+ 加密后的密碼為:" + encryptedPwd);
        System.out.println("++++++++++++++++++++++++++++++");
        // 備注:此方式也可以用于賬號(hào)密碼登錄的加鹽操作
    }
//    m4g9wdfnu4gMiWbCRGZjnF4T80NFO4yC
    @Test
    public void testPwdDecrypt() {
        // 實(shí)例化加密器
        StandardPBEStringEncryptor encryptor = new StandardPBEStringEncryptor();
        // 配置加密算法和秘鑰
        EnvironmentPBEConfig config = new EnvironmentPBEConfig();
        config.setAlgorithm("PBEWithMD5AndDES");    // 設(shè)置加密算法,默認(rèn)的
        config.setPassword("lvdamao");      // 用于加密的秘鑰(鹽),可以是隨機(jī)字符串,一定要記住并且存儲(chǔ)好
        encryptor.setConfig(config);
        String pendingPwd = "m4g9wdfnu4gMiWbCRGZjnF4T80NFO4yC";
        String myPwd = encryptor.decrypt(pendingPwd);
        System.out.println("++++++++++++++++++++++++++++++");
        System.out.println("+ 解密后的密碼為:" + myPwd);
        System.out.println("++++++++++++++++++++++++++++++");
    }
}

執(zhí)行測(cè)試加密程序,獲得加密后的字符串
例如:
秘鑰:lvdamao,密碼:lvdamaoluguo,加密后:q+diStq05V6enG/Dcvcc6kPk0f8vc0Ii

將秘鑰lvdamao和加密后的字符串q+diStq05V6enG/Dcvcc6kPk0f8vc0Ii填入第二段測(cè)試代碼進(jìn)行解密測(cè)試:
成功得到原始密碼lvdamaoluguo則表示成功

使用思路:可以給項(xiàng)目經(jīng)理或者架構(gòu)師使用此工具,通過(guò)秘鑰和原始密碼(例如數(shù)據(jù)庫(kù)密碼),獲取到一個(gè)新的加密后的字符串,后續(xù)其他項(xiàng)目開(kāi)發(fā)人員只能拿到加密字符串對(duì)數(shù)據(jù)庫(kù)進(jìn)行連接,從而有效的減少了數(shù)據(jù)庫(kù)密碼的暴露風(fēng)險(xiǎn)

3. 修改配置文件

找到項(xiàng)目的啟動(dòng)文件所在模塊,修改application.yml配置文件
設(shè)置jasypt和秘鑰lvdamao

jasypt:
  encryptor:
    algorithm: PBEWithMD5AndDES
    password: lvdamao

將加密后的字符串替換掉原來(lái)的明文密碼,并確保格式正確:

spring:
  datasource:                                     # 數(shù)據(jù)源的相關(guān)配置
    type: com.zaxxer.hikari.HikariDataSource      # 數(shù)據(jù)源的類型,可以更改為其他的數(shù)據(jù)源配置,比如druid
    driver-class-name: com.mysql.cj.jdbc.Driver      # mysql/MariaDB 的數(shù)據(jù)庫(kù)驅(qū)動(dòng)類名稱
    url: jdbc:mysql://192.168.88.160:3306/mpw-dev?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&useSSL=false&allowPublicKeyRetrieval=true&serverTimezone=UTC
    username: root
    password: ENC(q+diStq05V6enG/Dcvcc6kPk0f8vc0Ii)
    hikari:
      connection-timeout: 30000               # 等待連接池分配連接的最大時(shí)間(毫秒),超過(guò)這個(gè)時(shí)長(zhǎng)還沒(méi)有可用的連接,則會(huì)拋出SQLException
      minimum-idle: 5                         # 最小連接數(shù)
      maximum-pool-size: 20                   # 最大連接數(shù)
      auto-commit: true                       # 自動(dòng)提交
      idle-timeout: 600000                    # 連接超時(shí)的最大時(shí)長(zhǎng)(毫秒),超時(shí)則會(huì)被釋放(retired)
      pool-name: DataSourceHikariCP           # 連接池的名字
      max-lifetime: 18000000                  # 連接池的最大生命時(shí)長(zhǎng)(毫秒),超時(shí)則會(huì)被釋放(retired)
      connection-test-query: SELECT 1         # 用于發(fā)送sql語(yǔ)句保持連接狀態(tài)

例如在數(shù)據(jù)庫(kù)密碼上使用

4. 測(cè)試解密功能

當(dāng) Spring Boot 應(yīng)用啟動(dòng)時(shí),Jasypt 會(huì)自動(dòng)對(duì) ENC() 標(biāo)識(shí)的字符串進(jìn)行解密。可以通過(guò)以下方式驗(yàn)證解密是否成功:

import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@Slf4j
@RestController
@RequestMapping("/test")
public class HelloWorld {
    @Value("${spring.datasource.password}")
    private String decryptedPassword;
    @GetMapping("/paswword")
    public String hello(){
        return "Decrypted Password: " + decryptedPassword;
    }
}

訪問(wèn) /password 接口,應(yīng)該能夠看到解密后的明文密碼。

四、進(jìn)階配置

1. 自定義加密標(biāo)識(shí)

默認(rèn)情況下,Jasypt 使用 ENC() 作為加密標(biāo)識(shí)。如果你希望自定義加密標(biāo)識(shí),可以在 application.yml 文件中進(jìn)行如下配置:

jasypt:
  encryptor:
    property:
      prefix: MY_ENC(
      suffix: )
    password: your-secret-key

這樣,加密后的字符串將以 MY_ENC() 形式表示。

2. 指定加密算法

Jasypt 默認(rèn)使用 PBEWithMD5AndDES 算法進(jìn)行加密。如果你希望使用更高級(jí)別的加密算法(如 AES),可以在 application.yml 文件中指定:

jasypt:
  encryptor:
    algorithm: PBEWITHHMACSHA512ANDAES_256
    iv-generator-classname: org.jasypt.iv.NoIvGenerator
    password: your-secret-key

注意:某些高級(jí)加密算法可能需要安裝 Java Cryptography Extension (JCE) 無(wú)限強(qiáng)度權(quán)限策略文件。

五、總結(jié)

通過(guò)本文的學(xué)習(xí),我們了解了如何在 Spring Boot 項(xiàng)目中使用 Jasypt 對(duì) application.yml 文件中的敏感信息進(jìn)行加密。具體步驟包括引入 Jasypt 依賴、配置加密密鑰、加密敏感信息以及測(cè)試解密功能。此外,還介紹了如何自定義加密標(biāo)識(shí)和指定加密算法等進(jìn)階配置。

使用 Jasypt 不僅可以提高配置文件的安全性,還可以減少因配置文件泄露而導(dǎo)致的安全風(fēng)險(xiǎn)。希望本文對(duì)你有所幫助!

到此這篇關(guān)于SpringBoot使用Jasypt對(duì)YML文件配置內(nèi)容進(jìn)行加密(例:數(shù)據(jù)庫(kù)密碼加密)的文章就介紹到這了,更多相關(guān)SpringBoot Jasypt配置內(nèi)容加密內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 如何利用Retrofit+RxJava實(shí)現(xiàn)網(wǎng)絡(luò)請(qǐng)求的異常處理

    如何利用Retrofit+RxJava實(shí)現(xiàn)網(wǎng)絡(luò)請(qǐng)求的異常處理

    這篇文章主要介紹了如何利用Retrofit+RxJava實(shí)現(xiàn)網(wǎng)絡(luò)請(qǐng)求的異常處理,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2019-04-04
  • shade解決mybatis包沖突問(wèn)題

    shade解決mybatis包沖突問(wèn)題

    這篇文章主要介紹了shade解決mybatis包沖突問(wèn)題,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-08-08
  • StringRedisTemplate操作hash實(shí)現(xiàn)過(guò)程

    StringRedisTemplate操作hash實(shí)現(xiàn)過(guò)程

    文章總結(jié)了使用StringRedisTemplate操作Redis哈希(hash)的基本示例,分享了個(gè)人經(jīng)驗(yàn),旨在為讀者提供參考,并鼓勵(lì)大家支持腳本之家
    2026-03-03
  • 詳解Servlet 3.0/3.1 中的異步處理

    詳解Servlet 3.0/3.1 中的異步處理

    這篇文章主要介紹了詳解Servlet 3.0/3.1 中的異步處理,實(shí)例分析了servlet 3.0異步處理的技巧,非常具有實(shí)用價(jià)值,需要的朋友可以參考下
    2017-04-04
  • 淺談java多線程 join方法以及優(yōu)先級(jí)方法

    淺談java多線程 join方法以及優(yōu)先級(jí)方法

    下面小編就為大家?guī)?lái)一篇淺談java多線程 join方法以及優(yōu)先級(jí)方法。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-01-01
  • Java日常練習(xí)題,每天進(jìn)步一點(diǎn)點(diǎn)(3)

    Java日常練習(xí)題,每天進(jìn)步一點(diǎn)點(diǎn)(3)

    下面小編就為大家?guī)?lái)一篇Java基礎(chǔ)的幾道練習(xí)題(分享)。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧,希望可以幫到你
    2021-07-07
  • Nacos單機(jī)版安裝啟動(dòng)的全流程

    Nacos單機(jī)版安裝啟動(dòng)的全流程

    這篇文章主要介紹了Nacos單機(jī)版安裝啟動(dòng)的全流程,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-07-07
  • java導(dǎo)出json格式文件的示例代碼

    java導(dǎo)出json格式文件的示例代碼

    本篇文章主要介紹了java導(dǎo)出json格式文件的示例代碼,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-09-09
  • Spring Bean常用的的裝配方式詳解

    Spring Bean常用的的裝配方式詳解

    這篇文章主要介紹了Spring Bean常用的的裝配方式詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-07-07
  • 深入了解JVM字節(jié)碼增強(qiáng)技術(shù)

    深入了解JVM字節(jié)碼增強(qiáng)技術(shù)

    這篇文章主要介紹了深入了解JVM字節(jié)碼增強(qiáng)技術(shù),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-11-11

最新評(píng)論

新河县| 秦皇岛市| 东丽区| 思南县| 宜兴市| 观塘区| 灵川县| 拉萨市| 观塘区| 万安县| 金乡县| 女性| 碌曲县| 渝中区| 内乡县| 千阳县| 廉江市| 民乐县| 江津市| 正定县| 简阳市| 中牟县| 康马县| 故城县| 恭城| 嘉义县| 屏东县| 宜阳县| 乌兰浩特市| 壤塘县| 永定县| 微山县| 轮台县| 竹北市| 竹山县| 民丰县| 晋江市| 张家川| 深州市| 天全县| 旬邑县|