国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

手寫一個加鹽加密算法(java實現(xiàn))

這篇具有很好參考價值的文章主要介紹了手寫一個加鹽加密算法(java實現(xiàn))。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

目錄

前言?

什么是MD5??

?加鹽算法

那別的人會不會跟你得到相同的UUID??

如何使用鹽加密?

代碼實現(xiàn)


前言?

????????對于我們常見的登錄的時候需要用到的組件,加密是一個必不可少的東西,如果我們往數(shù)據(jù)庫存放用戶的密碼,是直接以明文存儲的話,那么數(shù)據(jù)被竊取的時候,損失也就是最大的,因為別人可以很直觀的看到你的用戶數(shù)據(jù),不需要任何破解成本。

? ? ? ? 所以我們需要對其加密。

? ? ? ? 目前最常見的兩種數(shù)據(jù)加密方法:

  1. MD5加密
  2. 加鹽算法

什么是MD5??

? ? ? ? 簡單來說,md5就是講遺傳字符串通過某種特定的算法,來將其變化成另外一種形式,這樣子就從明文的外觀變成另外一個樣子。但是由于背后的算法格式是固定的,所以每一個字符串都有固定的MD5格式。

? ? ? ?有的用戶為了方便記憶,把密碼設(shè)置成簡單的,有規(guī)律的字母或者數(shù)字組合,有的也喜歡使用單獨一個單詞這種,舉一個簡單的例子,例如密碼1234567,和密碼1726354,這兩種密碼,因為格式簡單,很容易就被一次一次的試出來,也就是被暴力破解。

? ? ? ? 然后我們使用1234567進行MD5加密,但是這樣就會讓數(shù)據(jù)完全處于安全狀態(tài)嗎?

? ? ? ? 具體如何破解?也就是講得到的,講得到的密碼進行MD5轉(zhuǎn)換成為對應(yīng)的哈希,然后于最初的哈希進行比對,要是匹配,那么這個密碼就已經(jīng)暴露給別人了

? ? ? ? MD5底層存在一張彩虹表,幾乎標記了所有字符串的MD5對照表。

????????有了彩虹表MD5就相當于是不存在了,因為一種字符串就只有一種特定的MD5格式

?加鹽算法

? ? ? ? 什么是鹽?

? ? ? ? 其實鹽就是一個隨機值,沒有任何規(guī)律,通過UUID.randomUUID()來生成一個唯一鹽值。這個uuid是唯一的,具體唯一就是根據(jù)你的mac地址等內(nèi)容生成的一個世界唯一的值,

那別的人會不會跟你得到相同的UUID??

下面的內(nèi)容來自百度百科:

手寫一個加鹽加密算法(java實現(xiàn)),JavaEE初階,Spring,javaEE進階,MD5,安全,java

? ? ? ? 官方說明:產(chǎn)生錯誤的情況非常低,是故大可不必考慮這個重復(fù)的問題

如何使用鹽加密?

? ? ? ? ?這里存在一個合約公式,也就是:鹽值(32位)+? $? + MD5加密后的密碼

? ? ? ? 加密思路:用戶輸入一個明文密碼,通過UUID得到一個鹽值,這段密碼首先使用MD5和鹽值進行一個基本的加密,然后使用合約公式,將鹽值和使用MD5+鹽值生成的合約公式存入數(shù)據(jù)庫

? ? ? ? 如何解密:這里的解密,不是指的直接將我們得到的合約公式又解密成明文,比如,用戶想要登錄,于是他輸入了他之前設(shè)置的密碼。這個密碼被后端得到之后,就會進行驗證,具體就是首先記住這個明文,然后通過數(shù)據(jù)庫中存儲的對應(yīng)用戶的合約公式拿出來,通過$來獲取鹽值,然后將用戶輸入的明文和拿到的鹽值進行MD5加密,然后再合成一個:

鹽值(32位)+? $? + MD5加密(鹽值+用戶輸入的密碼),

那么現(xiàn)在就有兩個合約公式了,一個是用戶注冊時候生成的,一個是用戶剛剛輸入的,后臺自動生成的合約公式

? ? ? ? 如果兩個合約公式是一樣的,那么就說明現(xiàn)在正在登錄這個賬戶的人是這個賬戶的持有者,就可以允許訪問

代碼實現(xiàn)

? ? ? ? ?在實現(xiàn)這個功能之前,你需要引入一個工具類,可以前往maven下載,地址為:

<dependency>
    <groupId>commons-codec</groupId>
    <artifactId>commons-codec</artifactId>
    <version>1.14</version> <!--根據(jù)需要選擇合適版本-->
</dependency>

代碼案例:

import org.apache.commons.codec.digest.DigestUtils;
 
public class Main {
   public static void main(String[] args) {
      String input = "Hello World"; // 輸入字符串
      
      // 計算MD5值
      String md5Hash = DigestUtils.md5Hex(input);
      
      System.out.println("MD5 Hash: " + md5Hash);
   }
}

根據(jù)上面的案例進行加密:

//  import org.apache.commons.codec.digest.DigestUtils;
//
//  import java.util.UUID;    
public static String encrypt(String password) {
        // 首先生產(chǎn)一個鹽值
        // UUID.randomUUID() 會生成32位數(shù)字,然后+4位‘-’,我們不需要關(guān)注‘-’在鹽值的什么位置,我們只需要去除它
        String salt = UUID.randomUUID().toString();
        System.out.println(salt);
        // 去除‘-’
        salt = salt.replaceAll("-","");
        // 然后使用鹽值和傳進來的密碼進行md5加密
        String saltPassowrd = DigestUtils.md5Hex((salt+password).getBytes());

        // 然后和鹽值進行拼接,然后返回
        String finalPassword = salt + '$' + saltPassowrd;
        return  finalPassword;
    }
}

解密:

? ? ? ? 解密的思路就是講用戶輸入的密碼重新進行一次加密,然后比對從數(shù)據(jù)庫中拿到的是不是一樣的:文章來源地址http://www.zghlxwxcb.cn/news/detail-796093.html

    public static boolean check(String inputPassword, String finalPassword){
        //首先判斷這兩個參數(shù)到底有沒有值,并且判斷數(shù)據(jù)庫中拿到的finalPassword的length是否為65;
        if (inputPassword == null || inputPassword.isEmpty()) {
            // 這里先判斷為不為空是因為后面的isEmpty的前提是字符串不為null,不然就會發(fā)生空指針異常
            return false;
        }
        if (finalPassword == null || finalPassword.isEmpty() || finalPassword.length() != 65) {
            return false;
        }
        // 從finalPassword中拿到鹽值
        String salt = finalPassword.split("\\$")[0];
        String saltPassword = DigestUtils.md5Hex((salt+inputPassword).getBytes());
        String ret = salt + '$' + saltPassword;
        if (ret.equals(finalPassword)) {
            return true;
        }
        return false;
    }

到了這里,關(guān)于手寫一個加鹽加密算法(java實現(xiàn))的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔相關(guān)法律責任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • 【JavaEE初階】 線程池詳解與實現(xiàn)

    【JavaEE初階】 線程池詳解與實現(xiàn)

    線程池,是一種線程的使用模式,它為了降低線程使用中頻繁的創(chuàng)建和銷毀所帶來的資源消耗與代價。 通過創(chuàng)建一定數(shù)量的線程,讓他們時刻準備就緒等待新任務(wù)的到達,而任務(wù)執(zhí)行結(jié)束之后再重新回來繼續(xù)待命。 想象這么一個場景: 在學(xué)校附近新開了一家快遞店,老板很

    2024年02月06日
    瀏覽(20)
  • 【JavaEE初階】 定時器詳解與實現(xiàn)

    【JavaEE初階】 定時器詳解與實現(xiàn)

    定時器也是軟件開發(fā)中的一個重要組件. 類似于一個 “鬧鐘”. 達到一個設(shè)定的時間之后, 就執(zhí)行某個指定好的代碼 定時器是一種實際開發(fā)中非常常用的組件. 比如網(wǎng)絡(luò)通信中, 如果對方 500ms 內(nèi)沒有返回數(shù)據(jù), 則斷開連接嘗試重連. 比如一個 Map, 希望里面的某個 key 在 3s 之后過

    2024年02月06日
    瀏覽(19)
  • 加鹽加密——保障你的數(shù)據(jù)安全

    加鹽加密——保障你的數(shù)據(jù)安全

    目錄 今日良言:理性和激情是生活不可或缺的調(diào)味品 一、加鹽加密 1.普通密碼的缺點 2.什么是加鹽加密 3.加鹽加密的過程 4.加鹽加密的實現(xiàn) 在介紹加鹽加密之前,先想想為什么普通密碼的缺點是什么? 普通的密碼不安全是因為它們通常很容易被猜到或破解。一個簡單的密碼可

    2024年02月06日
    瀏覽(21)
  • 密碼如何“加鹽加密”處理?程序員一定要掌握的知識

    密碼如何“加鹽加密”處理?程序員一定要掌握的知識

    目錄 前言 一、手寫加鹽算法 1.1、加密 1.1.1、加密思路 1.1.2、加密簡圖 1.1.3、代碼實現(xiàn) 1.2、解密 1.2.1、解密思路 1.2.2、解密代碼 1.3、驗證 二、使用?Spring Security 框架實現(xiàn)加鹽算法 為什么要使用加鹽的方式對密碼進行加密?我們知道傳統(tǒng)的 md5 加密方式是可以通過 “彩虹表”

    2024年02月16日
    瀏覽(89)
  • Python MD5加密的三種方法(可加鹽)

    Python MD5加密的三種方法(可加鹽)

    輸出結(jié)果: 輸出結(jié)果: 輸出結(jié)果: (參考文章:https://blog.csdn.net/xuefeng_210/article/details/123112339)

    2024年02月14日
    瀏覽(20)
  • AEAD加密算法Java實現(xiàn)

    AEAD加密算法Java實現(xiàn)

    目錄 一、什么是認證加密? 二、什么是帶關(guān)聯(lián)數(shù)據(jù)的認證加密? 認證加密 認證解密 常用AEAD算法? 三、AEAD_AES_256_GCM加解密Java實現(xiàn) 在消息的傳遞過程中,既要保持數(shù)據(jù)的機密性,也要保持數(shù)據(jù)的完整性。機密性可以依靠信息加密來解決,完整性可以通過消息驗證碼來檢查。

    2024年02月05日
    瀏覽(18)
  • Java實現(xiàn)密碼加密實現(xiàn)步驟【bcrypt算法】

    在Spring Boot和SSM中實現(xiàn)密碼加密可以使用bcrypt算法。bcrypt是一種密碼哈希函數(shù),通過將密碼與隨機生成的鹽值進行混合,然后再進行多次迭代的計算,最終生成一個安全的哈希密碼。 下面是使用bcrypt算法實現(xiàn)密碼加密的步驟和代碼示例: 通過以上步驟,我們可以在Spring Boot和

    2024年02月11日
    瀏覽(17)
  • Java 實現(xiàn) MD5 加密算法

    1.1 MD5 算法介紹 MD5 消息摘要算法,英文:MD5 Message-Digest Algorithm ,一種被廣泛使用的密碼散列函數(shù),可以產(chǎn)生出一個128位(16字節(jié))的散列值(hash value),用于確保信息傳輸完整一致。 MD5 是單向加密不可逆的,也就是常說的非對稱加密,常用于用戶密碼的加密,這樣即使密

    2024年02月09日
    瀏覽(33)
  • Java代碼實現(xiàn)RSA算法加密解密文件功能

    Java代碼實現(xiàn)RSA算法加密解密文件功能

    底層算法不做贅述,想要了解自行百度。 RSA屬于非對稱加密,非對稱加密有公鑰和私鑰兩個概念,私鑰自己擁有,不能給別人,公鑰公開。根據(jù)應(yīng)用的不同,我們可以選擇使用不同的密鑰加密: 簽名:使用私鑰加密,公鑰解密。用于讓所有公鑰所有者驗證私鑰所有者的身份

    2024年02月12日
    瀏覽(25)
  • JavaEE 初階篇-深入了解 UDP 通信與 TCP 通信(綜合案例:實現(xiàn) TCP 通信群聊)

    JavaEE 初階篇-深入了解 UDP 通信與 TCP 通信(綜合案例:實現(xiàn) TCP 通信群聊)

    ??博客主頁:?【 小扳_-CSDN博客】 ?感謝大家點贊??收藏?評論? 文章目錄 ? ? ? ? 1.0 UDP 通信 ????????1.1 DatagramSocket 類 ????????1.2 DatagramPacket 類 ????????1.3 實現(xiàn) UDP 通信(一發(fā)一收) ? ? ? ? 1.3.1 客戶端的開發(fā) ? ? ? ? 1.3.2 服務(wù)端的開發(fā) ????????1.4 實

    2024年04月26日
    瀏覽(21)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包