在 Java 中生雜湊值成 MD5 雜湊值

Mohd Mohtashim Nawaz 2023年10月12日
  1. Java 中的 MD5 雜湊值演算法
  2. 在 Java 中使用 MD5 雜湊值
  3. 在 Java 中對大資料使用 MD5 雜湊值
  4. まとめ
在 Java 中生雜湊值成 MD5 雜湊值

在本文中,我們將瞭解生成資料雜湊值的 MD5 演算法以及如何在 Java 中生成資料的 MD5 雜湊值。

Java 中的 MD5 雜湊值演算法

MD5 雜湊演算法是一種密碼雜湊演算法,主要用作資料檔案的校驗和。我們可以使用這個演算法來生成我們資料的 128 位加密雜湊值。

MD5 雜湊演算法被廣泛使用,因為它比現代安全雜湊演算法快得多。

在 Java 中使用 MD5 雜湊值

Java 廣泛用於檔案傳輸和伺服器端程式設計;找到一個生成 MD5 雜湊值的庫並不奇怪。Java 為我們提供了一個 MessageDigest 類,它是 Java 'security' 包中的 MessageDigestSpi 的子類。

要在 Java 中生成 MD5 雜湊值,

  • 從 Java 安全包中匯入 MessageDisgest 類。
  • 在獲取訊息摘要之前將我們的資料轉換為位元組流。
  • 然後,呼叫 getInstance() 方法來建立 MD5 雜湊演算法的例項。

    例子 :

    public static MessageDigest getInstance(String algorithm) throws NoSuchAlgorithmException
    
  • 我們將通過傳遞我們想要獲取 MD5 雜湊值的資料來呼叫 digest() 方法。

    例子:

    public byte[] digest(byte[] input)
    
  • 將訊息摘要作為位元組流儲存到位元組陣列中。
  • 最後,將訊息摘要從位元組轉換為字串。

讓我們使用 Java 中的工作程式碼來理解上述方法。

程式碼片段:

import java.math.BigInteger;
import java.nio.charset.StandardCharsets;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.*;

public class md5Test {
  public static void main(String[] args) {
    String str;
    Scanner scan = new Scanner(System.in);
    str = scan.nextLine();
    System.out.println("Your input: " + str);

    byte[] msg = str.getBytes();

    byte[] hash = null;
    try {
      MessageDigest md = MessageDigest.getInstance("MD5");
      hash = md.digest(msg);
    } catch (NoSuchAlgorithmException e) {
      e.printStackTrace();
    }
    StringBuilder strBuilder = new StringBuilder();
    for (byte b : hash) {
      strBuilder.append(String.format("%02x", b));
    }
    String strHash = strBuilder.toString();
    System.out.println("The MD5 hash: " + strHash);
  }
}

輸出:

Hello, Peter
Your input: Hello, Peter
The MD5 hash: 945062a2fee23e0901b37fcb5cd952c9

Java is so awesome.
Your input: Java is so awesome.
The MD5 hash: 601835019da217140c2755c919ee18c2

在 Java 中對大資料使用 MD5 雜湊值

如果你有大資料或以塊的形式讀取資料,請使用 update() 方法。

例子:

public void update(byte[] input)

每次讀取資料塊時,都應該通過傳遞當前資料塊來呼叫 update() 方法。讀取所有資料後,使用 digest() 方法的以下多型形式。

例子:

public byte[] digest() // It means you will pass no parameter to the `digest()` method.

為了演示,你可以檢視以下示例。

程式碼片段:

import java.math.BigInteger;
import java.nio.charset.StandardCharsets;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.*;

public class md5Test {
  public static void main(String[] args) {
    String str;
    Scanner scan = new Scanner(System.in);
    System.out.println("Enter message:");
    str = scan.nextLine();
    System.out.println("Your input: " + str);

    byte[] hash = null;

    MessageDigest md = null;

    try {
      md = MessageDigest.getInstance("MD5");
    } catch (NoSuchAlgorithmException e) {
      e.printStackTrace();
    }

    md.update(str.getBytes());

    System.out.println("Enter message:");
    str = scan.nextLine();

    md.update(str.getBytes());
    hash = md.digest();

    StringBuilder strBuilder = new StringBuilder();
    for (byte b : hash) {
      strBuilder.append(String.format("%02x", b));
    }
    String strHash = strBuilder.toString();
    System.out.println("The MD5 hash: " + strHash);
  }
}

輸出:

Enter message:
Hello Java
Your input: Hello Java
Enter message:
I'm Peter
The MD5 hash: 9008f99fa602a036ce0c7a6784b240b1

まとめ

我們在共享資料時應確保的基本安全措施之一是確保資料完整性。因此,我們需要一種雜湊演算法來生成與接收方共享的資料的校驗和,以確保完整性。

我們已經瞭解了使用 MessageDigest 類及其方法生成 MD5 校驗和的方法。最好在分塊讀取資料時保持謹慎,以免得到不正確的結果。