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

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

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

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

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

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

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

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

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

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

3.SpringBoot項(xiàng)目中如何使用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工具類

主要用于提前進(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 加密類PooledPBEStringEncryptor所需要的配置類
     */
    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();//加密類
        SimpleStringPBEConfig config = getJasyptConfig(salt);//獲取并設(shè)置加密配置類
        encryptor.setConfig(config);
        String encryptText = encryptor.encrypt(text);//進(jìn)行加密
        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);
    }
 
}

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

稍微了解兩個(gè)加密算法,PBEWithMD5AndDES和PBEWITHHMACSHA512ANDAES_256
這兩個(gè)算法跟jasypt的版本有關(guān),如果我們不配置加密算法,無論是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編寫讀取yml文件屬性值的配置類TestConfig 

這里主要是為了測(cè)試能不能在獲取到屬性之前,密文已經(jīng)被解密了,也就是說此處如果正確的話,獲取到的就是我們的明文“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隨便編寫一個(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直接就爆露出來了,很危險(xiǎn),尤其是放在代碼中,也很容易就發(fā)現(xiàn),一般不會(huì)寫在配置文件中的,我們可以把它放到啟動(dòng)類的程序?qū)崊⒅?/p>

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

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

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

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

相關(guān)文章

  • Java多線程繼承Thread類詳解

    Java多線程繼承Thread類詳解

    Java多線程的兩種實(shí)現(xiàn)方式:繼承Thread類 & 實(shí)現(xiàn)Runable接口,今天我們來學(xué)習(xí)下繼承Thread類,希望大家能夠喜歡
    2016-06-06
  • java對(duì)象序列化操作實(shí)例分析

    java對(duì)象序列化操作實(shí)例分析

    這篇文章主要介紹了java對(duì)象序列化操作,結(jié)合實(shí)例形式分析了java對(duì)象序列化操作相關(guān)實(shí)現(xiàn)步驟與操作注意事項(xiàng),需要的朋友可以參考下
    2019-11-11
  • 如何將Object類轉(zhuǎn)換為實(shí)體類

    如何將Object類轉(zhuǎn)換為實(shí)體類

    這篇文章主要介紹了如何將Object類轉(zhuǎn)換為實(shí)體類,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-08-08
  • 詳解Spring MVC4 純注解配置教程

    詳解Spring MVC4 純注解配置教程

    本篇文章主要介紹了Spring MVC4 純注解配置教程,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-04-04
  • mybatisPlus中批量刪除的示例代碼

    mybatisPlus中批量刪除的示例代碼

    本文主要介紹了mybatisPlus中批量刪除的示例代碼,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-06-06
  • Spring BeanPostProcessor(后置處理器)的用法

    Spring BeanPostProcessor(后置處理器)的用法

    這篇文章主要介紹了Spring BeanPostProcessor(后置處理器)的用法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-10-10
  • Java使用組件編寫窗口實(shí)現(xiàn)網(wǎng)絡(luò)圖片顯示

    Java使用組件編寫窗口實(shí)現(xiàn)網(wǎng)絡(luò)圖片顯示

    這篇文章主要為大家詳細(xì)介紹了Java使用組件編寫窗口實(shí)現(xiàn)網(wǎng)絡(luò)圖片顯示的相關(guān)資料,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-02-02
  • Mybatis Trim標(biāo)簽用法簡單介紹

    Mybatis Trim標(biāo)簽用法簡單介紹

    這篇文章主要介紹了Mybatis Trim標(biāo)簽用法,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下
    2017-05-05
  • SpringMVC框架REST架構(gòu)體系原理分析

    SpringMVC框架REST架構(gòu)體系原理分析

    REST:Representational State Transfer,資源表現(xiàn)層狀態(tài)轉(zhuǎn)換,是目前&#12112;較主流的&#12032;種互聯(lián)網(wǎng)軟件架構(gòu),它結(jié)構(gòu)清晰、標(biāo)準(zhǔn)規(guī)范、易于理解、便于擴(kuò)展
    2021-09-09
  • 在springboot中注入FilterRegistrationBean不生效的原因

    在springboot中注入FilterRegistrationBean不生效的原因

    這篇文章主要介紹了在springboot中注入FilterRegistrationBean不生效的原因及解決,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-08-08

最新評(píng)論