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

SpringBoot實(shí)現(xiàn)Md5對(duì)數(shù)據(jù)庫(kù)數(shù)據(jù)加密的示例

 更新時(shí)間:2023年04月13日 08:35:38   作者:慕言要努力  
本文主要介紹了SpringBoot實(shí)現(xiàn)Md5對(duì)數(shù)據(jù)庫(kù)數(shù)據(jù)加密的示例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧

因?yàn)殚_(kāi)學(xué)等各種原因,導(dǎo)致更新的速度越來(lái)越慢,當(dāng)然在此期間也進(jìn)行了一些其他技術(shù)的學(xué)習(xí),今天給大家?guī)?lái)的就是我們的通過(guò)MD5進(jìn)行數(shù)據(jù)庫(kù)加密。

MD5概述:

MD5消息摘要算法,屬Hash算法一類。MD5算法對(duì)輸入任意長(zhǎng)度的消息進(jìn)行運(yùn)行,產(chǎn)生一個(gè)128位的消息摘要(32位的數(shù)字字母混合碼)。

MD5主要特點(diǎn):

不可逆,相同數(shù)據(jù)的MD5值肯定一樣,不同數(shù)據(jù)的MD5值不一樣

 (一個(gè)MD5理論上的確是可能對(duì)應(yīng)無(wú)數(shù)多個(gè)原文的,因?yàn)镸D5是有限多個(gè)的而原文可以是無(wú)數(shù)多個(gè)。比如主流使用的MD5將任意長(zhǎng)度的“字節(jié)串映射為一個(gè)128bit的大整數(shù)。也就是一共有2^128種可能,大概是3.4*10^38,這個(gè)數(shù)字是有限多個(gè)的,而但是世界上可以被用來(lái)加密的原文則會(huì)有無(wú)數(shù)的可能性)

MD5的性質(zhì):

  • 壓縮性:任意長(zhǎng)度的數(shù)據(jù),算出的MD5值長(zhǎng)度都是固定的(相當(dāng)于超損壓縮)。
  • 容易計(jì)算:從原數(shù)據(jù)計(jì)算出MD5值很容易。
  • 抗修改性:對(duì)原數(shù)據(jù)進(jìn)行任何改動(dòng),哪怕只修改1個(gè)字節(jié),所得到的MD5值都有很大區(qū)別。
  • 弱抗碰撞:已知原數(shù)據(jù)和其MD5值,想找到一個(gè)具有相同MD5值的數(shù)據(jù)(即偽造數(shù)據(jù))是非常困難的。
  • 強(qiáng)抗碰撞:想找到兩個(gè)不同的數(shù)據(jù),使它們具有相同的MD5值,是非常困難的。

雖說(shuō)MD5有不可逆的特點(diǎn)但是由于某些MD5破解網(wǎng)站,專門用來(lái)查詢MD5碼,其通過(guò)把常用的密碼先MD5處理,并將數(shù)據(jù)存儲(chǔ)起來(lái),然后跟需要查詢的MD5結(jié)果匹配,這時(shí)就有可能通過(guò)匹配的MD5得到明文,所以有些簡(jiǎn)單的MD5碼是反查到加密前原文的。

為了讓MD5碼更加安全,涌現(xiàn)了很多其他方法,如加鹽。 鹽要足夠長(zhǎng)足夠亂 得到的MD5碼就很難查到。

MD5用途:

1.防止被篡改:

  • 比如發(fā)送一個(gè)電子文檔,發(fā)送前,我先得到MD5的輸出結(jié)果a。然后在對(duì)方收到電子文檔后,對(duì)方也得到一個(gè)MD5的輸出結(jié)果b。如果a與b一樣就代表中途未被篡改。
  • 比如我提供文件下載,為了防止不法分子在安裝程序中添加木馬,我可以在網(wǎng)站上公布由安裝文件得到的MD5輸出結(jié)果。
  • SVN在檢測(cè)文件是否在CheckOut后被修改過(guò),也是用到了MD5.

2.防止直接看到明文:

現(xiàn)在很多網(wǎng)站在數(shù)據(jù)庫(kù)存儲(chǔ)用戶的密碼的時(shí)候都是存儲(chǔ)用戶密碼的MD5值。這樣就算不法分子得到數(shù)據(jù)庫(kù)的用戶密碼的MD5值,也無(wú)法知道用戶的密碼。(比如在UNIX系統(tǒng)中用戶的密碼就是以MD5(或其它類似的算法)經(jīng)加密后存儲(chǔ)在文件系統(tǒng)中。當(dāng)用戶登錄的時(shí)候,系統(tǒng)把用戶輸入的密碼計(jì)算成MD5值,然后再去和保存在文件系統(tǒng)中的MD5值進(jìn)行比較,進(jìn)而確定輸入的密碼是否正確。通過(guò)這樣的步驟,系統(tǒng)在并不知道用戶密碼的明碼的情況下就可以確定用戶登錄系統(tǒng)的合法性。這不但可以避免用戶的密碼被具有系統(tǒng)管理員權(quán)限的用戶知道,而且還在一定程度上增加了密碼被破解的難度。)

3.防止抵賴(數(shù)字簽名):

這需要一個(gè)第三方認(rèn)證機(jī)構(gòu)。例如A寫(xiě)了一個(gè)文件,認(rèn)證機(jī)構(gòu)對(duì)此文件用MD5算法產(chǎn)生摘要信息并做好記錄。若以后A說(shuō)這文件不是他寫(xiě)的,權(quán)威機(jī)構(gòu)只需對(duì)此文件重新產(chǎn)生摘要信息,然后跟記錄在冊(cè)的摘要信息進(jìn)行比對(duì),相同的話,就證明是A寫(xiě)的了。這就是所謂的“數(shù)字簽名”。

  • 比如發(fā)送一個(gè)電子文檔,發(fā)送前,我先得到MD5的輸出結(jié)果a。然后在對(duì)方收到電子文檔后,對(duì)方也得到一個(gè)MD5的輸出結(jié)果b。如果a與b一樣就代表中途未被篡改。
  • 比如我提供文件下載,為了防止不法分子在安裝程序中添加木馬,我可以在網(wǎng)站上公布由安裝文件得到的MD5輸出結(jié)果。
  • SVN在檢測(cè)文件是否在CheckOut后被修改過(guò),也是用到了MD5.SpringBoot使用:

首先,還是會(huì)利用到我們的hutool:Hutool參考文檔 

我們發(fā)現(xiàn),hutool工具類里面的SecureUtil可以對(duì)我們的MD5進(jìn)行使用,那么我們就可以更好更簡(jiǎn)單的去實(shí)現(xiàn)我們的MD5加密了

依賴導(dǎo)入:

        <!-- hutool  -->
        <dependency>
            <groupId>cn.hutool</groupId>
            <artifactId>hutool-all</artifactId>
            <version>5.7.20</version>
        </dependency>

然后在我們新建的SpringBoot項(xiàng)目里面進(jìn)行我們的一個(gè)測(cè)試

private static final String PASSWORD = "123456";
 
    @Test
    public void testMd5() {
        String res1 = SecureUtil.md5(PASSWORD);
        String res2 = SecureUtil.md5(PASSWORD);
        System.out.println(res1);
        System.out.println(res2);
        System.out.println(res1.equals(res2));
    }

最后在我們的控制臺(tái)里面輸出,并得到一下結(jié)果

那我們?nèi)绾问褂玫轿覀兊臄?shù)據(jù)庫(kù)呢?按照思路,我們應(yīng)該從用戶的注冊(cè)就開(kāi)始進(jìn)行對(duì)我們的密碼進(jìn)行加密處理,所以我們需要在我們的Service進(jìn)行編碼處理程序。 

我們?cè)诳刂茖荧@取到我們用戶的數(shù)據(jù),把它當(dāng)做一個(gè)包命名為UserDTO,單獨(dú)封裝起來(lái),方便我們隨時(shí)對(duì)我們的數(shù)據(jù)進(jìn)行處理和查找。我們?cè)赨serDTO里面對(duì)密碼進(jìn)行加密之前要獲取我們的數(shù)據(jù),也就是我們的密碼。 

@Override
    public User register(UserDTO userDTO) {
        // 用戶密碼 md5加密
        userDTO.setPassword(SecureUtil.md5(userDTO.getPassword()));
        userDTO.setNickname(userDTO.getUsername());
        userDTO.setSex("男");
        userDTO.setAvatarUrl("https://cube.elemecdn.com/0/88/03b0d39583f48206768a7534e55bcpng.png");
        User one = getUserInfo(userDTO);
        if (one == null) {
            one = new User();
            BeanUtil.copyProperties(userDTO, one, true);
            save(one);//存到數(shù)據(jù)庫(kù)
        } else {
            throw new ServerException(Constants.CODE_600, "用戶已存在");
        }
        return one;
    }

在前端執(zhí)行成功之后,我們數(shù)據(jù)庫(kù)里面的數(shù)據(jù)就發(fā)生了變化

那我們?cè)谧?cè)的時(shí)候進(jìn)行了數(shù)據(jù)加密,那我們登錄不解密就寄了,咋們就會(huì)登錄不了,這不是亂寫(xiě)嘛,別急,馬上進(jìn)行解密實(shí)現(xiàn)登錄操作。

沒(méi)想到吧,是跟注冊(cè)差不多的操作。那有人問(wèn)你這里注釋寫(xiě)的是MD5加密,你的解密去哪里了呢?這不是胡扯嘛?。?!

其實(shí)我們的SecureUtil不僅可以進(jìn)行加密,也可以進(jìn)行解密,所以我們?cè)诘卿浀臅r(shí)候要獲取我們的用戶密碼,就是直接進(jìn)行解密操作,供我們的操作使用。所以說(shuō)Hutool這個(gè)工具實(shí)在是真的強(qiáng)大,幫我們解決很多復(fù)雜的程序。

下面給大家分享一下AES

AES算法簡(jiǎn)介

AES算法全稱Advanced Encryption Standard,又稱Rijndael加密法,是美國(guó)聯(lián)邦政府采用的一種區(qū)塊加密標(biāo)準(zhǔn)。這個(gè)標(biāo)準(zhǔn)用來(lái)替代原先的DES,已經(jīng)被多方分析且廣為全世界所使用。經(jīng)過(guò)五年的甄選流程,高級(jí)加密標(biāo)準(zhǔn)由美國(guó)國(guó)家標(biāo)準(zhǔn)與技術(shù)研究院 (NIST)于2001年11月26日發(fā)布于FIPS PUB 197,并在2002年5月26日成為有效的標(biāo)準(zhǔn)。2006年,高級(jí)加密標(biāo)準(zhǔn)已然成為對(duì)稱密鑰加密中最流行的算法之一。
AES支持三種長(zhǎng)度的密鑰:128位,192位,256位。

AES算法原理

1.密鑰

密鑰是AES算法實(shí)現(xiàn)加密和解密的根本。對(duì)稱加密算法之所以對(duì)稱,是因?yàn)檫@類算法對(duì)明文的加密和解密需要使用同一個(gè)密鑰。
AES支持三種長(zhǎng)度的密鑰:128位,192位,256位
平時(shí)大家所說(shuō)的AES128,AES192,AES256,實(shí)際上就是指的AES算法對(duì)不同長(zhǎng)度密鑰的使用。

2.填充

要想了解填充的概念,我們先要了解AES的分組加密特性。什么是分組加密呢?我們來(lái)看看下面這張圖:AES算法在對(duì)明文加密的時(shí)候,并不是把整個(gè)明文一股腦加密成一整段密文,而是把明文拆分成一個(gè)個(gè)獨(dú)立的明文塊,每一個(gè)明文塊長(zhǎng)度128bit。

這些明文塊經(jīng)過(guò)AES加密器的復(fù)雜處理,生成一個(gè)個(gè)獨(dú)立的密文塊,這些密文塊拼接在一起,就是最終的AES加密結(jié)果。

假如一段明文長(zhǎng)度是192bit,如果按每128bit一個(gè)明文塊來(lái)拆分的話,第二個(gè)明文塊只有64bit,不足128bit。這時(shí)候怎么辦呢?就需要對(duì)明文塊進(jìn)行填充(Padding)。

依然是我們的SecureUtil來(lái)進(jìn)行加密解密處理

最后控制臺(tái)輸出結(jié)果為:

好了,以上就是我近期學(xué)習(xí)的結(jié)果,可以進(jìn)行數(shù)據(jù)庫(kù)數(shù)據(jù)加密解密。

?小結(jié)

到此這篇關(guān)于SpringBoot實(shí)現(xiàn)Md5對(duì)數(shù)據(jù)庫(kù)數(shù)據(jù)加密的示例的文章就介紹到這了,更多相關(guān)SpringBoot Md5加密內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 如何解決Spring in action @valid驗(yàn)證不生效的問(wèn)題

    如何解決Spring in action @valid驗(yàn)證不生效的問(wèn)題

    這篇文章主要介紹了如何解決Spring in action @valid驗(yàn)證不生效的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-06-06
  • JUnit5相關(guān)內(nèi)容簡(jiǎn)介

    JUnit5相關(guān)內(nèi)容簡(jiǎn)介

    這篇文章主要介紹了JUnit5相關(guān)內(nèi)容簡(jiǎn)介,具有一定借鑒價(jià)值,需要的朋友可以參考下
    2018-01-01
  • JAVA OutputStreamWriter流的實(shí)現(xiàn)

    JAVA OutputStreamWriter流的實(shí)現(xiàn)

    OutputStreamWriter是從字符流到字節(jié)流的橋接,它使用的字符集可以通過(guò)名稱指定,也可以明確指定,或者可以接受平臺(tái)的默認(rèn)字符集,本文詳細(xì)的介紹了JAVA OutputStreamWriter流的使用,感興趣的可以了解一下
    2021-06-06
  • 詳解Elastic Search搜索引擎在SpringBoot中的實(shí)踐

    詳解Elastic Search搜索引擎在SpringBoot中的實(shí)踐

    本篇文章主要介紹了Elastic Search搜索引擎在SpringBoot中的實(shí)踐,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-01-01
  • TreeSet判斷重復(fù)元素解析及代碼示例

    TreeSet判斷重復(fù)元素解析及代碼示例

    這篇文章主要介紹了TreeSet判斷重復(fù)元素解析及代碼示例,具有一定借鑒價(jià)值,需要的朋友可以參考下
    2018-01-01
  • java使用jdbc鏈接Oracle示例類分享

    java使用jdbc鏈接Oracle示例類分享

    本文為大家提供一個(gè)java使用jdbc鏈接Oracle的示例類,大家參考使用吧
    2014-01-01
  • JAVA通過(guò)HttpClient發(fā)送HTTP請(qǐng)求的方法示例

    JAVA通過(guò)HttpClient發(fā)送HTTP請(qǐng)求的方法示例

    本篇文章主要介紹了JAVA通過(guò)HttpClient發(fā)送HTTP請(qǐng)求的方法示例,詳細(xì)的介紹了HttpClient使用,具有一定的參考價(jià)值,有興趣的可以了解一下
    2017-09-09
  • Spring中使用AOP進(jìn)行事務(wù)管理實(shí)例

    Spring中使用AOP進(jìn)行事務(wù)管理實(shí)例

    這篇文章主要介紹了Spring中使用AOP進(jìn)行事務(wù)管理實(shí)例,當(dāng)在Spring項(xiàng)目中涉及數(shù)據(jù)庫(kù)操作時(shí),事務(wù)管理是非常重要的,它可以確保數(shù)據(jù)庫(kù)操作的一致性和完整性,Spring提供了強(qiáng)大的事務(wù)管理功能,可以通過(guò)聲明式或編程式兩種方式進(jìn)行配置,需要的朋友可以參考下
    2023-09-09
  • Java實(shí)現(xiàn)PDF導(dǎo)出功能的示例代碼

    Java實(shí)現(xiàn)PDF導(dǎo)出功能的示例代碼

    這篇文章主要為大家詳細(xì)介紹了Java實(shí)現(xiàn)PDF導(dǎo)出功能的相關(guān)知識(shí),文中的示例代碼講解詳細(xì),具有一定的學(xué)習(xí)價(jià)值,感興趣的小伙伴可以了解下
    2023-09-09
  • 從零開(kāi)始讓你的Spring?Boot項(xiàng)目跑在Linux服務(wù)器

    從零開(kāi)始讓你的Spring?Boot項(xiàng)目跑在Linux服務(wù)器

    這篇文章主要給大家介紹了如何從零開(kāi)始讓你的Spring?Boot項(xiàng)目跑在Linux服務(wù)器的相關(guān)資料,由于springboot是內(nèi)嵌了tomcat,所以可以直接將項(xiàng)目打包上傳至服務(wù)器上,需要的朋友可以參考下
    2021-11-11

最新評(píng)論

富阳市| 双流县| 明光市| 伊吾县| 通河县| 来凤县| 安龙县| 高密市| 洛扎县| 香港 | 临清市| 牟定县| 旌德县| 东平县| 将乐县| 德庆县| 始兴县| 大竹县| 洱源县| 保靖县| 河东区| 丰原市| 新源县| 珲春市| 济南市| 图们市| 杂多县| 阳东县| 呼玛县| 萨嘎县| 明水县| 香格里拉县| 儋州市| 集贤县| 个旧市| 邛崃市| 蛟河市| 屏山县| 鸡泽县| 济南市| 洛扎县|