MessageDigestの機能と使い方
MessageDigest は Java のクラスの一つであり、与えられた入力データの要約(またはハッシュ値)を計算するための不可逆のハッシュアルゴリズムを提供しています。
MessageDigestクラスの主な機能には、次のものが含まれます:
- いくつかのハッシュアルゴリズムが提供されています。MessageDigestクラスはMD5、SHA-1、SHA-256など、複数のハッシュアルゴリズムをサポートしています。getInstanceメソッドを使用して、指定されたアルゴリズムのMessageDigestインスタンスを取得できます。
- ハッシュ値の計算:MessageDigestインスタンスのupdateメソッドを呼び出すことで、データを入力できます。その後、digestメソッドを呼び出すことで、入力データのハッシュ値を計算できます。digestメソッドは、計算されたハッシュ値を表すバイト配列を返します。
- MessageDigest インスタンスに複数のデータを入力することができます。update メソッドを複数回呼び出すことで、複数のデータを入力できます。最終的に 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メソッドを呼び出して計算されたハッシュ値を取得し、それを16進数の文字列に変換して出力します。
MessageDigest クラスはスレッドセーフではないため、マルチスレッド環境で使用する場合は、各スレッドごとに個別の MessageDigest インスタンスを作成する必要があります。