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

Java 實(shí)現(xiàn) MD5 加密算法

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

1. MD5 加密算法

1.1 MD5 算法介紹

MD5 消息摘要算法,英文:MD5 Message-Digest Algorithm ,一種被廣泛使用的密碼散列函數(shù),可以產(chǎn)生出一個128位(16字節(jié))的散列值(hash value),用于確保信息傳輸完整一致。

MD5 是單向加密不可逆的,也就是常說的非對稱加密,常用于用戶密碼的加密,這樣即使密碼泄露也不知道對應(yīng)的明文信息,有效的保護(hù)系統(tǒng)和用戶的隱私信息。

MD5 算法產(chǎn)生的是一個 128 位的散列值,128 位是指的二進(jìn)制中的 128 位,具體占 16 字節(jié)(每個字節(jié)可以表示為 8 位二進(jìn)制數(shù))。

MD5 加密最終會將 128 位數(shù)字轉(zhuǎn)換成十六進(jìn)制表示,每個字節(jié)( 8 位)轉(zhuǎn)成 2 位十六進(jìn)制數(shù),最終得到 32 個字符,其中每兩個字符代表一個十六進(jìn)制數(shù),因此最終 MD5 加密結(jié)果字符長度為 32 位。

1.2 算法加鹽

由于 MD5 算法是單向的,不能被反向解析,但是可以通過正向加密后的字典表(Lookup 表和 Rainbow 表)對比的方式進(jìn)行暴力破解。

對于此種情況可以使用自定義偏移常量(鹽值)的方法來降低加密結(jié)果被破解的可能。

2. Java 中實(shí)現(xiàn) MD5 加密

2.1 JDK 提供的 MD5 算法

Java 中進(jìn)行 MD5 加密使用的是 JDk 中的 java.security 包中的 MessageDigest 類,其中的 getInstance() 方法可以根據(jù)算法名稱獲取對應(yīng)的算法實(shí)例。

// 獲取 MD5 算法實(shí)例對象
MessageDigest md = MessageDigest.getInstance("MD5");

2.2 字符串的 MD5 加密

根據(jù) JDK 提供的算法,可以對任意的字符內(nèi)容進(jìn)行 MD5 加密處理,加密處理的流程為:

  1. 獲取 MD5 算法實(shí)例

  2. 獲取需要加密的字符內(nèi)容對應(yīng)的的字節(jié)信息,可指定編碼方式

  3. 對得到的字節(jié)信息使用 MD5 算法處理,得到加密后的字節(jié)

  4. 將加密后的字節(jié)轉(zhuǎn)化為 16 進(jìn)制字符串

  5. 返回加密后的字符串信息

public static String md5(String data) {
    try {
        MessageDigest md = MessageDigest.getInstance("MD5");
        byte[] md5 = md.digest(data.getBytes(StandardCharsets.UTF_8));
        
        // 將處理后的字節(jié)轉(zhuǎn)成 16 進(jìn)制,得到最終 32 個字符
        StringBuilder sb = new StringBuilder();
        for (byte b : md5) {            
             sb.append(String.format("%02x", b));
        }
        return sb.toString();
    } catch (NoSuchAlgorithmException e) {
        e.printStackTrace();
    }
    return "";
}
  • MessageDigest 類可以獲取 MD5 實(shí)例

  • md.digest() 計算字符串內(nèi)容的摘要,并得到計算后的 hash value

  • StandardCharsets.UTF_8 用來指定計算時使用的編碼格式,如果不指定則會使用系統(tǒng)默認(rèn)編碼格式,系統(tǒng)之間不統(tǒng)一會造成中文亂碼

  • sb.append(String.format(“%02x”, b)) 用于將字節(jié)信息轉(zhuǎn)為十六進(jìn)制

最后,可以在 main 方法中驗(yàn)證 MD5 算法的有效性

public static void main(String[] args) {
    String password = "testPsd";
    String passwordMd5Str = md5(password);
    System.out.println("加密前: " + password);
    System.out.println("加密后: " + passwordMd5Str);
}

輸出結(jié)果為

加密前: testPsd
加密后: 52c165118aae94580335f628dc8b202b

2.3 加鹽處理

使用鹽值可以進(jìn)一步提升 MD5 加密算法安全性,降低破解風(fēng)險。

public static String md5(String data) {
    try {
        MessageDigest md = MessageDigest.getInstance("MD5");

        // 加鹽處理,需要將對應(yīng)的鹽記錄,用于驗(yàn)證密碼
        int randomNum = new SecureRandom().nextInt(1000);
        
        byte[] md5 = md.digest((data + randomNum).getBytes(StandardCharsets.UTF_8));

        StringBuilder sb = new StringBuilder();
        for (byte b : md5) {
            //sb.append(Integer.toHexString(b & 0xff));
            // 字符串格式轉(zhuǎn)成 16 進(jìn)制
             sb.append(String.format("%02x", b));
        }
        return sb.toString();
    } catch (NoSuchAlgorithmException e) {
        e.printStackTrace();
    }
    return "";
}

2.4 文件的 MD5 值計算

MD5 算法除了用于對字符內(nèi)容進(jìn)行加密,還可以用來對文件進(jìn)行 MD5 校驗(yàn)。

文件進(jìn)行 MD5 校驗(yàn)即針對每個文件可以計算出一個 MD5 值來作為該文件的唯一編碼,如果文件在傳輸過程中發(fā)生了修改,那么最終得到文件的 MD5 值會發(fā)生變化。

根據(jù)上述 MD5 校驗(yàn)方法可以驗(yàn)證文件的有效性,保證文件在傳輸過程中不會被篡改。

public static String md5ForFile(String filePath) {
    MessageDigest md = null;
    byte[] fileBytes = new byte[0];

    try {
        md = MessageDigest.getInstance("MD5");
        fileBytes = Files.readAllBytes(Paths.get(filePath));
    }catch (NoSuchAlgorithmException e) {
        e.printStackTrace();
    }catch (IOException e) {
        e.printStackTrace();
    }

    byte[] md5 = md.digest(fileBytes);
    StringBuilder sb = new StringBuilder();
    for (byte b : md5) {
        sb.append(String.format("%02x", b));
    }
    return sb.toString();
}

在 main 方法中驗(yàn)證 MD5 算法的有效性

public static void main(String[] args) {
    String filePath = "C:\桌面\test.jpg";
    String fileMd5Str = md5ForFile(filePath);
    System.out.println("加密后: " + fileMd5Str);
}

輸出結(jié)果為文章來源地址http://www.zghlxwxcb.cn/news/detail-698669.html

加密后: 75f590a718ee6e8f65c0e7bf780a9e79

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

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

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

相關(guān)文章

  • java和C#md5算法互通

    對應(yīng)的C#代碼如下 注意這里需要自己拼接字符串,比如java代碼如下 對應(yīng)的C#代碼如下

    2024年02月07日
    瀏覽(16)
  • Java使用MD5加鹽對密碼進(jìn)行加密處理,附注冊和登錄加密解密處理

    Java使用MD5加鹽對密碼進(jìn)行加密處理,附注冊和登錄加密解密處理

    在開發(fā)的時候,有一些敏感信息是不能直接通過明白直接保存到數(shù)據(jù)庫的。最經(jīng)典的就是密碼了。如果直接把密碼以明文的形式入庫,不僅會泄露用戶的隱私,對系統(tǒng)也是極其的不厲,這樣做是非常危險的。 那么我們就需要對這些銘文進(jìn)行加密。 現(xiàn)在市場是加密的方式已經(jīng)

    2024年02月02日
    瀏覽(22)
  • C#常用的加密算法之一 MD5

    MD5加密概述,原理及實(shí)現(xiàn) C#常用的加密算法:MD5、Base64、SHA1、SHA256、HmacSHA256、DES、AES、RSA MD5消息摘要算法,屬Hash算法一類。MD5算法對輸入任意長度的消息進(jìn)行運(yùn)行,產(chǎn)生一個128位的消息摘要(32位的數(shù)字字母混合碼)。 不可逆,相同數(shù)據(jù)的MD5值肯定一樣,不同數(shù)據(jù)的MD5值不一

    2024年02月10日
    瀏覽(27)
  • C# 實(shí)現(xiàn)MD5加密

    日常程序開發(fā)中,涉及到敏感數(shù)據(jù)內(nèi)容,通常會采取加密處理以保證數(shù)據(jù)安全,本篇文章講述了在C#中使用MD5方法加密數(shù)據(jù) MD5的全稱是message-digest algorithm 5,MD5算法屬于hash算法的一類,對消息進(jìn)行運(yùn)算,產(chǎn)生一個128位的消息摘要(32位數(shù)字字母),并且加密不可逆,相同數(shù)據(jù)

    2024年02月08日
    瀏覽(18)
  • MD5加密--Python實(shí)現(xiàn)

    MD5消息摘要算法(MD5 Message-Digest Algorithm),一種被廣泛使用的密碼散列函數(shù),可以產(chǎn)生出一個128位(16字節(jié))的散列值(hash value),用于確保信息傳輸完整一致。 MD5是最常見的摘要算法,速度很快,生成結(jié)果是固定的128 bit 字節(jié),通常用一個32位的16進(jìn)制字符串表示。 MD5加密

    2024年02月11日
    瀏覽(17)
  • MD5 到底算不算一種加密算法?

    MD5 到底算不算一種加密算法?

    一旦提到加密算法,經(jīng)常有人會有這樣的疑問:MD5 到底算不算一種加密算法呢? 在回答這個問題之前,我們需要先弄清楚兩點(diǎn): 什么是加密算法? 什么是 MD5? 數(shù)據(jù)加密的基本過程就是對原來為明文的文件或數(shù)據(jù)按某種算法進(jìn)行處理,使其成為不可讀的一段代碼為“密文”

    2024年02月09日
    瀏覽(17)
  • C#集成數(shù)據(jù)加密算法,包含DES、RSA、Base64、SHA、MD5算法,輕松實(shí)現(xiàn)數(shù)據(jù)加密解密需求

    C#集成數(shù)據(jù)加密算法,包含DES、RSA、Base64、SHA、MD5算法,輕松實(shí)現(xiàn)數(shù)據(jù)加密解密需求

    在需要使用配置文件的工控軟件中,往往需要在配置文件和數(shù)據(jù)庫中對一些數(shù)據(jù)加密,即對一串?dāng)?shù)據(jù)進(jìn)行加密算法后輸出復(fù)雜符號和字符的形式,讓非相關(guān)人員無法識別原有數(shù)據(jù),從而對數(shù)據(jù)或數(shù)據(jù)庫進(jìn)行相應(yīng)的保護(hù),這往往也是公司安全部門的基本要求。 網(wǎng)上寫加密算法的

    2024年02月03日
    瀏覽(95)
  • 【Node.js實(shí)戰(zhàn)】一文帶你開發(fā)博客項(xiàng)目之安全(sql注入、xss攻擊、md5加密算法)

    【Node.js實(shí)戰(zhàn)】一文帶你開發(fā)博客項(xiàng)目之安全(sql注入、xss攻擊、md5加密算法)

    個人簡介 ?? 個人主頁: 前端雜貨鋪 ???♂? 學(xué)習(xí)方向: 主攻前端方向,也會涉及到服務(wù)端 ?? 個人狀態(tài): 在校大學(xué)生一枚,已拿多個前端 offer(秋招) ?? 未來打算: 為中國的工業(yè)軟件事業(yè)效力n年 ?? 推薦學(xué)習(xí):??前端面試寶典 ??Vue2 ??Vue3 ??Vue2Vue3項(xiàng)目實(shí)戰(zhàn) ??

    2024年02月03日
    瀏覽(26)
  • RSA、MD5加密解密算法全套解析安裝教程

    RSA、MD5加密解密算法全套解析安裝教程

    第一部分介紹加密解密算法, 第二部分介紹我小組成功應(yīng)用的RSA、MD5兩種加密解密算法,以及心得體會。 1、加密解密算法介紹 應(yīng)用的開發(fā)中安全很重要,所以信息加密技術(shù)顯得尤為重要。我們需要對應(yīng)用中的多項(xiàng)數(shù)據(jù)進(jìn)行加密處理,從而來保證應(yīng)用上線后的安全性,給用戶

    2024年02月09日
    瀏覽(26)
  • Java工具集 Hex、Hmac算法(MD5、SHA1、SHA256、SHA384、SHA512)、雪花算法SnowflakeId、redis基于Springboot工具類

    Java工具集 Hex、Hmac算法(MD5、SHA1、SHA256、SHA384、SHA512)、雪花算法SnowflakeId、redis基于Springboot工具類

    ??作者主頁:青花鎖 ??簡介:Java領(lǐng)域優(yōu)質(zhì)創(chuàng)作者??、Java微服務(wù)架構(gòu)公號作者?? ??簡歷模板、學(xué)習(xí)資料、面試題庫、技術(shù)互助 ??文末獲取聯(lián)系方式 ?? 專欄 描述 Java項(xiàng)目實(shí)戰(zhàn) 介紹Java組件安裝、使用;手寫框架等 Aws服務(wù)器實(shí)戰(zhàn) Aws Linux服務(wù)器上操作nginx、git、JDK、Vue Jav

    2024年04月09日
    瀏覽(26)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包