MessageDigest 是 Java 中的一個類,它提供了一種不可逆的哈希算法,用于計算給定輸入數據的摘要(或稱為哈希值)。
MessageDigest 類的主要功能包括:
提供多種哈希算法:MessageDigest 類支持多種哈希算法,如 MD5、SHA-1、SHA-256 等。可以使用 getInstance 方法來獲取指定算法的 MessageDigest 實例。
計算哈希值:通過調用 MessageDigest 實例的 update 方法,可以向其輸入數據。然后,通過調用 digest 方法,可以計算出輸入數據的哈希值。digest 方法返回一個字節數組,表示計算得到的哈希值。
支持多次輸入數據:可以多次調用 update 方法,將多塊數據輸入到 MessageDigest 實例中。最后調用 digest 方法計算哈希值時,會將所有輸入數據合并到一起進行計算。
重用實例:MessageDigest 實例在計算完一次哈希值后,并不會自動重置為初始狀態。可以通過調用 reset 方法,重置 MessageDigest 實例,以便重用。
下面是一個簡單的示例代碼,展示了如何使用 MessageDigest 類計算輸入字符串的 SHA-256 哈希值:
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
public class MessageDigestExample {
public static void main(String[] args) {
String input = "Hello, World!";
try {
// 獲取 SHA-256 哈希算法的 MessageDigest 實例
MessageDigest md = MessageDigest.getInstance("SHA-256");
// 將輸入字符串轉換為字節數組,并輸入到 MessageDigest 實例中
md.update(input.getBytes());
// 計算哈希值并獲取結果
byte[] digest = md.digest();
// 將字節數組轉換為十六進制字符串
StringBuilder sb = new StringBuilder();
for (byte b : digest) {
sb.append(String.format("%02x", b));
}
String hashedInput = sb.toString();
System.out.println("Input: " + input);
System.out.println("Hashed Input: " + hashedInput);
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
}
}
}
以上代碼通過調用 MessageDigest.getInstance 方法獲取 SHA-256 哈希算法的 MessageDigest 實例。然后,將輸入字符串轉換為字節數組,并通過調用 update 方法輸入到 MessageDigest 實例中。最后,通過調用 digest 方法獲取計算得到的哈希值,并將其轉換為十六進制字符串進行輸出。
需要注意的是,MessageDigest 類不是線程安全的,如果需要在多線程環境下使用,應當為每個線程創建一個獨立的 MessageDigest 實例。