在 Java 中生雜湊值成 MD5 雜湊值
Mohd Mohtashim Nawaz
2023年10月12日
在本文中,我們將瞭解生成資料雜湊值的 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 校驗和的方法。最好在分塊讀取資料時保持謹慎,以免得到不正確的結果。