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

SpringBoot使用jasypt實現(xiàn)數(shù)據(jù)庫信息脫敏的方法詳解

 更新時間:2024年06月17日 09:08:52   作者:不會八股文  
這篇文章主要介紹了SpringBoot使用jasypt實現(xiàn)數(shù)據(jù)庫信息的脫敏,以此來保護數(shù)據(jù)庫的用戶名username和密碼password(容易上手,詳細),文中有詳細的圖文講解和代碼示例供大家參考,需要的朋友可以參考下

1.為什么要有這個需求?

一般當我們自己練習的時候,username和password直接是爆露出來的

假如別人路過你旁邊時看到了你的數(shù)據(jù)庫賬號密碼,他跑到他的電腦打開navicat直接就是一頓連接,直接瘋狂刪除你的數(shù)據(jù)庫,那可就廢了,所以像這種重要的敏感信息,一般是加密過后顯示出來的,也就是數(shù)據(jù)的脫敏,一般公司你看到的數(shù)據(jù)庫連接信息是這樣的。

這顯然就是加密過后的,但是數(shù)據(jù)庫連接時如果獲取到的是你加密過后的密碼,那肯定是錯誤的,所以我們需要在數(shù)據(jù)庫獲取到信息之前,把它給解密,切記解密是在獲取到數(shù)據(jù)之前進行的。

2.jasypt是如何保證數(shù)據(jù)安全的?

可能你會好奇,它既然能解密,那我拿著你的密文去調(diào)用jasypt提供的解密方法(api)去解密不就行了嗎?但是jasypt可不是這么干的!它提供了一個鹽salt,它加密和解密是如下過程進行的。

可以看出沒有鹽你就算知道密文也沒用。也可以說鹽就是打開你金庫的鑰匙。此時你可能會好奇,那密文肯定是代碼里面生成的啊,那你生成的時候鹽salt和原密碼肯定也是寫在代碼里了,那不也不安全嗎?其實這個密文是我們提前通過測試工具類生成好的再放到配置文件中,生成好以后測試工具類就可以直接刪除了,所以鹽和原密碼不會暴漏在代碼中,最終只有你知道。

3.SpringBoot項目中如何使用jasypt

3.1引入依賴

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

3.2創(chuàng)建jasypt工具類

主要用于提前進行加密和解密的

package com.fzy.utils;
 
import org.jasypt.encryption.pbe.PooledPBEStringEncryptor;
import org.jasypt.encryption.pbe.config.SimpleStringPBEConfig;
 
public class JasyptPasswordUtil {
 
    private static final String PBEWITHMD5ANDDES = "PBEWithMD5AndDES";
    private static final String PBEWITHHMACSHA512ANDAES_256 = "PBEWITHHMACSHA512ANDAES_256";
 
    /**
     * 加密
     * @param salt 你設置加密用的鹽
     * @return 加密類PooledPBEStringEncryptor所需要的配置類
     */
    public static SimpleStringPBEConfig getJasyptConfig(String salt){
        //加解密配置
        SimpleStringPBEConfig config = new SimpleStringPBEConfig();
        config.setPassword(salt);//配置鹽?。?!極其重要
        config.setAlgorithm(PBEWITHHMACSHA512ANDAES_256);//加密算法
        //下面的配置不用關心
        config.setKeyObtentionIterations("1000");
        config.setPoolSize("1");
        config.setProviderName("SunJCE");
        config.setSaltGeneratorClassName("org.jasypt.salt.RandomSaltGenerator");
        config.setIvGeneratorClassName("org.jasypt.iv.RandomIvGenerator");
        config.setStringOutputType("base64");
        return config;
    }
 
    /**
     * 加密方法
     * @param salt 輸入鹽
     * @param text 輸入需要加密的文本
     * @return 密文
     */
    public static String encryptText(String salt, String text){
        PooledPBEStringEncryptor encryptor = new PooledPBEStringEncryptor();//加密類
        SimpleStringPBEConfig config = getJasyptConfig(salt);//獲取并設置加密配置類
        encryptor.setConfig(config);
        String encryptText = encryptor.encrypt(text);//進行加密
        return encryptText;
    }
 
    /**
     * 解密方法,此處沒什么用,就是用來自己看看能不能解密
     * @param salt 輸入鹽
     * @param text 輸入需要加密的文本
     * @return 明文
     */
    public static String  decryptText(String salt, String text){
        PooledPBEStringEncryptor encryptor = new PooledPBEStringEncryptor();
        SimpleStringPBEConfig config = getJasyptConfig(salt);
        encryptor.setConfig(config);
        String decryptText = encryptor.decrypt(text);
        return decryptText;
    }
 
    public static void main(String[] args) {
        //生成的密文將來放到你yml文件中,例如數(shù)據(jù)庫的用戶名密碼等敏感信息
        String encryptText = encryptText("biecaile", "root");
        System.out.println("加密后:" + encryptText);
 
        String decrypt = decryptText("biecaile", encryptText);
        System.out.println("解密后:" + decrypt);
    }
 
}

運行后的結(jié)果:

稍微了解兩個加密算法,PBEWithMD5AndDES和PBEWITHHMACSHA512ANDAES_256
這兩個算法跟jasypt的版本有關,如果我們不配置加密算法,無論是3.0還是2.0好像加密都是PBEWithMD5AndDES,但是解密,如果2.0.xxx是使用的PBEWithMD5AndDES,3.0使用的是PBEWITHHMACSHA512ANDAES_256,此處不是指我們自己測試去解密,而是指再配置完yml文件或者程序參數(shù)后自己去解密(下面),所以如果解密算法與加密不一致就會報錯(一般啟動項目就會報錯),最好指定加密算法,像我是3.0版指定加密算法為PBEWITHHMACSHA512ANDAES_256
那在yml文件中就不用再配置解密算法了。配一下當然最好。

3.3配置yml文件

jasypt:
  encryptor:
    password: biecaile #解密鹽值
    algorithm: PBEWITHHMACSHA512ANDAES_256 #解密算法
test:
  password: ENC(MsGb7KJD6ZxdEH5O42MM+lDVH6mvtP46IlwVqbXq/CHQR75x2+WG7YyOf3Ootndd)

其中的test:password是我們自定義的,主要用于測試,ENC()這個是jasypt自動識別yml屬性值的一個標識,只要加上,當前值就會被解析成明文,里面存放的是我們生成的密文。

3.4編寫讀取yml文件屬性值的配置類TestConfig 

這里主要是為了測試能不能在獲取到屬性之前,密文已經(jīng)被解密了,也就是說此處如果正確的話,獲取到的就是我們的明文“root”,實際工作根本不需要

package com.fzy.config;
 
import lombok.Data;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Configuration;
 
@Configuration
@Data
public class TestConfig {
    @Value("${test.password}")
    private String password;
}

3.5隨便編寫一個TestController去測試獲取該數(shù)據(jù)

@Controller
@RequestMapping("/test")
public class TestController {
    @Autowired
    private TestConfig testConfig;
    @RequestMapping("/getText")
    @ResponseBody
    public String getText(){
        return testConfig.getPassword();
    }
}

  結(jié)果發(fā)現(xiàn)獲取到的是明文,已經(jīng)成功了

4.能在配置文件中配鹽值salt嗎?

肯定是不行的,這樣salt直接就爆露出來了,很危險,尤其是放在代碼中,也很容易就發(fā)現(xiàn),一般不會寫在配置文件中的,我們可以把它放到啟動類的程序?qū)崊⒅?/p>

填寫:--jasypt.encryptor.password=你的鹽值salt,然后apply+ok確定就行。

配置完以后把你在配置文件中的password(所謂的salt去掉就行),結(jié)果一樣的。一般只要salt配的不對,程序啟動就會直接報錯。

總結(jié):這樣的話,就算我把代碼給你,你都跑不起來項目,因為你沒有salt就配不了,然后你只能去問我要,我就不給你,那么你就破解不了數(shù)據(jù)庫的密文,你就別想連上我的數(shù)據(jù)庫。

以上就是SpringBoot使用jasypt實現(xiàn)數(shù)據(jù)庫信息脫敏的方法詳解的詳細內(nèi)容,更多關于SpringBoot jasypt數(shù)據(jù)脫敏的資料請關注腳本之家其它相關文章!

相關文章

  • Mybatis中Collection集合標簽的使用詳解

    Mybatis中Collection集合標簽的使用詳解

    這篇文章主要介紹了Mybatis中Collection集合標簽的使用詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-06-06
  • 解決rocketmq-spring-boot-starter導致的多消費者實例重復消費問題

    解決rocketmq-spring-boot-starter導致的多消費者實例重復消費問題

    這篇文章主要介紹了解決rocketmq-spring-boot-starter導致的多消費者實例重復消費問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-06-06
  • Java中的注解和反射實例詳解

    Java中的注解和反射實例詳解

    這篇文章主要給大家介紹了關于Java中注解和反射的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-03-03
  • Java讀取DWG文件的示例詳解

    Java讀取DWG文件的示例詳解

    本文將通過一個代碼示例,展示如何使用Teigha Java API來讀取DWG文件,并解釋了實現(xiàn)這一功能所需的關鍵步驟,包括添加依賴、初始化API、打開文件、處理數(shù)據(jù)和關閉文件,感興趣的朋友一起看看吧
    2025-06-06
  • MyBatis關閉一級緩存的兩種方式(分注解和xml兩種方式)

    MyBatis關閉一級緩存的兩種方式(分注解和xml兩種方式)

    這篇文章主要介紹了MyBatis關閉一級緩存的兩種方式(分注解和xml兩種方式),mybatis默認開啟一級緩存,執(zhí)行2次相同sql,但是第一次查詢sql結(jié)果會加工處理這個時候需要關閉一級緩存,本文給大家詳細講解需要的朋友可以參考下
    2022-11-11
  • ava實現(xiàn)一致性Hash算法

    ava實現(xiàn)一致性Hash算法

    本文主要詳細介紹了Java如何實現(xiàn)一致性Hash算法,其實現(xiàn)原理將key映射到?2^32?-?1?的空間中,將這個數(shù)字的首尾相連,形成一個環(huán)。想了解更多的同學,可以參考本文
    2023-03-03
  • Java web三件套listener、filter、servelt原理解析

    Java web三件套listener、filter、servelt原理解析

    這篇文章主要介紹了Java web三件套listener、filter、servelt原理解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-03-03
  • Mybatis-Plus實現(xiàn)用戶ID自增出現(xiàn)的問題解決

    Mybatis-Plus實現(xiàn)用戶ID自增出現(xiàn)的問題解決

    項目基于 SpringBoot + MybatisPlus 3.5.2 使用數(shù)據(jù)庫自增ID時, 出現(xiàn)重復鍵的問題,本文就來介紹一下解決方法,感興趣的可以了解一下
    2023-09-09
  • java實現(xiàn)支付寶退款功能

    java實現(xiàn)支付寶退款功能

    這篇文章主要為大家詳細 介紹了java實現(xiàn)支付寶退款功能,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-09-09
  • Mybatis 返回值類型和參數(shù)傳遞的配置方法

    Mybatis 返回值類型和參數(shù)傳遞的配置方法

    在 MyBatis 中,返回值類型和參數(shù)傳遞是 Mapper 接口中至關重要的兩個方面,正確理解和使用它們可以幫助我們高效、準確地進行數(shù)據(jù)庫操作,接下來通過本文給大家介紹Mybatis 返回值類型和參數(shù)傳遞的配置方法,感興趣的朋友跟隨小編一起看看吧
    2024-08-08

最新評論

广丰县| 宜良县| 上饶县| 洪洞县| 高淳县| 安康市| 三台县| 五原县| 子长县| 铁岭县| 罗甸县| 抚顺县| 鸡西市| 金溪县| 绥滨县| 东乌珠穆沁旗| 比如县| 睢宁县| 唐海县| 子洲县| 武胜县| 邓州市| 民权县| 蒙自县| 东兰县| 郑州市| 同江市| 广昌县| 镇沅| 巴林右旗| 安义县| 区。| 江阴市| 亚东县| 长岭县| 南城县| 新疆| 郎溪县| 通城县| 竹溪县| 双桥区|