MD5(資訊摘要演算法 5)



MD5 方法是最早獲得全球認可的雜湊演算法之一,它取代了 MD4 演算法。儘管存在潛在的安全風險,但 MD5 在各種情況下都是資料基礎設施的重要組成部分。

在深入研究 MD5 之前,我們需要了解雜湊到底是什麼!

什麼是雜湊?

雜湊是將標準資訊字串轉換為複雜資料片段的過程。這樣做是為了對資訊進行加密,使其完全改變原始值,從而產生一個與原始值完全不同的雜湊值。

Hashing Technique

雜湊使用雜湊函式將常規資料轉換為不可讀的形式。這些雜湊函式是一系列數學運算,通常稱為雜湊摘要或摘要,將原始資料轉換為其雜湊值。無論輸入大小如何,特定雜湊函式(例如 MD5 或 SHA1)的摘要大小始終相同。

雜湊主要有兩個用例:

密碼驗證

為了保護密碼免受攻擊者的侵害,網站的使用者憑據通常以雜湊格式儲存。比較密碼雜湊更私密,因為雜湊函式對於相同的輸入始終返回相同的結果。

Password Verification

以下是完整流程的工作原理:

  • 使用者在登入網站時建立新密碼。
  • 它對密碼進行雜湊,並將結果作為摘要儲存在伺服器上。
  • 使用者每次嘗試登入時都必須重新輸入密碼。
  • 為了建立摘要,它會再次使用雜湊演算法執行透過輸入的密碼。
  • 如果新建立的摘要與伺服器上的摘要匹配,則驗證登入。

完整性驗證

雜湊函式可用於檢查某些檔案是否存在資料損壞。與上述示例一樣,雜湊函式即使在迭代引數發生變化的情況下,對於相同的輸入也會始終產生相同的結果。

Integrity Verification

該過程的步驟如下:

  • 個人將檔案釋出到網際網路。
  • 雜湊摘要也與檔案一起上傳。
  • 當用戶獲取檔案時,雜湊摘要會更新。
  • 如果摘要與初始雜湊值匹配,則檔案完整性得到保留。
  • 在建立了雜湊的基本基礎後,您就可以檢查 MD5 演算法,這是本章的主要重點。

什麼是 MD5 演算法?

MD5(訊息摘要方法 5)是一種加密雜湊演算法,可用於從任意長度的字串建立 128 位摘要。摘要使用 32 位十六進位制數表示。

該方法由羅納德·裡維斯特於 1991 年建立,用於啟用數字簽名的驗證。為了增強安全措施,它已整合到各種框架中。

MD5 Algorithm

由於雜湊函式的建議,摘要大小始終為 128 位,即使對輸入字串進行微小的更改也會導致摘要發生很大差異。這是為了減少雜湊衝突(或生成類似雜湊)的可能性。

現在,您將學習構成 MD5 演算法工作原理的步驟。

MD5 演算法步驟

該演算法包含四個主要部分:

填充位

當您收到輸入字串時,請驗證其大小是否比 512 的倍數小 64 位。為了舍入多餘的字元,您必須在新增一個 (1) 到填充位之後新增零。

Padding Bits

填充長度

最終字串需要包含更多字元才能成為 512 的倍數。為此,請獲取原始輸入的長度並將其表示為 64 位。將兩者組合後,最後一個字串將準備好進行雜湊。

Padding Length

初始化 MD 緩衝區

整個字串被分成多個塊,每個塊包含 512 位。此外,需要初始化四個緩衝區 (A、B、C 和 D)。這四個 32 位緩衝區分別初始化如下:

Initialize MD Buffer

處理每個塊

512 位塊可以進一步細分為 16 個子塊,每個子塊包含 32 位。四輪運算中的每一輪都使用所有緩衝區、常量陣列值和子塊。

您可以將此常量陣列稱為 T[1] ⇒ T[64]。

子塊由符號 M[0] ⇒ M[15] 標識。

MD5 的實現

現在,我們將藉助不同的程式語言來實現 MD5 演算法,以便您能夠使用任何一種語言進行編碼。

使用 Python

為了實現 MD5 演算法,我們將使用 Python 的 hashlib 模組,該模組提供了對計算給定訊息的雜湊值的支援。因此,Python 中的程式碼如下所示:

import hashlib

def generate_md5(input_string):
   md5_hash = hashlib.md5(input_string.encode()).hexdigest()
   return md5_hash

# function execution
input_string = "tutorialspoint"
md5_hash = generate_md5(input_string)
print("MD5 hash for", input_string, ":", md5_hash)

輸出

MD5 hash for tutorialspoint : 6c60b3cfe5124f982eb629e00a98f01f

使用 Java

現在,我們將藉助 Java 及其內建庫來實現 MD5。因此,我們將使用兩個類 MessageDigest 和 NoSuchAlgorithmException。MessageDigest 類允許我們建立各種訊息摘要演算法(如 MD5)的例項,而 NoSuchAlgorithmException 在所需加密演算法在環境中不可訪問時引發。使用 Java 實現 MD5 的程式碼如下所示:

import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;

public class Md5Algo {
   public static String generateMD5(String input) {
      try {
         MessageDigest md = MessageDigest.getInstance("MD5");
         byte[] inputBytes = input.getBytes();
         byte[] hashBytes = md.digest(inputBytes);

         // Convert the byte array to a hexadecimal string
         StringBuilder sb = new StringBuilder();
         for (byte b : hashBytes) {
            sb.append(String.format("%02x", b));
         }
         return sb.toString();
      } catch (NoSuchAlgorithmException e) {
         e.printStackTrace();
         return null;
      }
   }

   public static void main(String[] args) {
      String input = "tutorialspoint";
      String md5Hash = generateMD5(input);
      System.out.println("MD5 hash for " + input + " : " + md5Hash);
   }
}

輸出

MD5 hash for tutorialspoint : 6c60b3cfe5124f982eb629e00a98f01f

MD5 的應用

以下是我們可以使用 MD5 演算法的一些常見應用:

  • 訊息摘要用於驗證和檢查檔案的完整性。
  • 資料加密和安全由 MD5 處理。
  • 它用於密碼驗證和訊息摘要,無論訊息大小。
  • 它也用於圖形和遊戲板。

MD5 的優點

以下是 MD5 的一些優點:

  • 易於比較 - 在摘要驗證方面,與最新的雜湊算法系列相比,32 位摘要的比較相對簡單。
  • 保持密碼安全 - 如果密碼未以未加密格式儲存,駭客和其他攻擊者可以訪問密碼。資料庫也受益於摘要,因為所有雜湊值的大小相同。
  • 低資源消耗 - 為了將多個服務合併到一個框架中而不會引入 CPU 成本,需要相對較小的記憶體佔用。
  • 完整性檢查 - 透過分析傳輸前後雜湊值,您可以留意任何檔案損壞。一旦雜湊值匹配,檔案完整性檢查就是有效的並防止資料損壞。

MD5 的缺點

  • 有時,對於不同的輸入,MD5 會建立類似的雜湊函式。
  • SHA1 比 MD5 提供更好的安全性。
  • 據說 MD5 演算法不安全。目前正在使用 SHA256 代替 MD5。
  • MD5 不適用於對稱或非對稱演算法。

MD5 演算法安全嗎?

任何訊息摘要函式的目標都是生成看起來隨機的摘要。為了使雜湊函式被認為是加密安全的,需要滿足兩個條件:

  • 攻擊者無法生成與給定雜湊值匹配的訊息。
  • 攻擊者不可能生成具有相同雜湊值的兩個訊息。

IETF 指出,MD5 雜湊不應用於加密身份驗證,因為它們不再被視為加密安全的技術。

廣告

© . All rights reserved.