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

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

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

1.為什么要有這個(gè)需求?

一般當(dāng)我們自己練習(xí)的時(shí)候,username和password直接是爆露出來(lái)的

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

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

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

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

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

3.SpringBoot項(xiàng)目中如何使用jasypt

3.1引入依賴(lài)

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

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

主要用于提前進(jìn)行加密和解密的

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 你設(shè)置加密用的鹽
     * @return 加密類(lèi)PooledPBEStringEncryptor所需要的配置類(lèi)
     */
    public static SimpleStringPBEConfig getJasyptConfig(String salt){
        //加解密配置
        SimpleStringPBEConfig config = new SimpleStringPBEConfig();
        config.setPassword(salt);//配置鹽!??!極其重要
        config.setAlgorithm(PBEWITHHMACSHA512ANDAES_256);//加密算法
        //下面的配置不用關(guān)心
        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();//加密類(lèi)
        SimpleStringPBEConfig config = getJasyptConfig(salt);//獲取并設(shè)置加密配置類(lèi)
        encryptor.setConfig(config);
        String encryptText = encryptor.encrypt(text);//進(jìn)行加密
        return encryptText;
    }
 
    /**
     * 解密方法,此處沒(méi)什么用,就是用來(lái)自己看看能不能解密
     * @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) {
        //生成的密文將來(lái)放到你yml文件中,例如數(shù)據(jù)庫(kù)的用戶(hù)名密碼等敏感信息
        String encryptText = encryptText("biecaile", "root");
        System.out.println("加密后:" + encryptText);
 
        String decrypt = decryptText("biecaile", encryptText);
        System.out.println("解密后:" + decrypt);
    }
 
}

運(yùn)行后的結(jié)果:

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

3.3配置yml文件

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

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

3.4編寫(xiě)讀取yml文件屬性值的配置類(lèi)TestConfig 

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

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隨便編寫(xiě)一個(gè)TestController去測(cè)試獲取該數(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直接就爆露出來(lái)了,很危險(xiǎn),尤其是放在代碼中,也很容易就發(fā)現(xiàn),一般不會(huì)寫(xiě)在配置文件中的,我們可以把它放到啟動(dòng)類(lèi)的程序?qū)崊⒅?/p>

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

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

總結(jié):這樣的話(huà),就算我把代碼給你,你都跑不起來(lái)項(xiàng)目,因?yàn)槟銢](méi)有salt就配不了,然后你只能去問(wèn)我要,我就不給你,那么你就破解不了數(shù)據(jù)庫(kù)的密文,你就別想連上我的數(shù)據(jù)庫(kù)。

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

相關(guān)文章

  • Mybatis中Collection集合標(biāo)簽的使用詳解

    Mybatis中Collection集合標(biāo)簽的使用詳解

    這篇文章主要介紹了Mybatis中Collection集合標(biāo)簽的使用詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-06-06
  • 解決rocketmq-spring-boot-starter導(dǎo)致的多消費(fèi)者實(shí)例重復(fù)消費(fèi)問(wèn)題

    解決rocketmq-spring-boot-starter導(dǎo)致的多消費(fèi)者實(shí)例重復(fù)消費(fèi)問(wèn)題

    這篇文章主要介紹了解決rocketmq-spring-boot-starter導(dǎo)致的多消費(fèi)者實(shí)例重復(fù)消費(fèi)問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-06-06
  • Java中的注解和反射實(shí)例詳解

    Java中的注解和反射實(shí)例詳解

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

    Java讀取DWG文件的示例詳解

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

    MyBatis關(guān)閉一級(jí)緩存的兩種方式(分注解和xml兩種方式)

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

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

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

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

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

    Mybatis-Plus實(shí)現(xiàn)用戶(hù)ID自增出現(xiàn)的問(wèn)題解決

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

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

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

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

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

最新評(píng)論

厦门市| 乐安县| 尖扎县| 略阳县| 股票| 灵石县| 木兰县| 靖州| 彭州市| 吴桥县| 大荔县| 榆中县| 太湖县| 尼勒克县| 冕宁县| 固安县| 砀山县| 丰宁| 建始县| 阿勒泰市| 河曲县| 玉环县| 盐源县| 兴海县| 迭部县| 莆田市| 溧水县| 桂平市| 五家渠市| 辽宁省| 襄垣县| 辉县市| 纳雍县| 玛纳斯县| 礼泉县| 巨鹿县| 霍林郭勒市| 开鲁县| 华阴市| 渝中区| 大竹县|