Java で MD5 ハッシュを生成する
この記事では、データのハッシュを生成するための MD5 アルゴリズムと、Java でデータの MD5 ハッシュを生成する方法について説明します。
Java での MD5 ハッシュアルゴリズム
MD5 ハッシュアルゴリズムは暗号化ハッシュアルゴリズムであり、主にデータファイルのチェックサムとして使用されます。このアルゴリズムを使用して、データの 128 ビット暗号化ハッシュを生成できます。
MD5 ハッシュアルゴリズムは、最新のセキュアハッシュアルゴリズムよりもはるかに高速であるため、広く使用されています。
Java で MD5 ハッシュを使用する
Java は、ファイル転送とサーバー側プログラミングに広く使用されています。MD5 ハッシュを生成するライブラリを見つけることは驚くべきことではありません。Java は、Java の'security'
パッケージにある MessageDigestSpi
の子クラスである MessageDigest
クラスを提供します。
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
まとめ
データを共有する際に確保する必要のある基本的なセキュリティ対策の 1つは、データの整合性を確保することです。したがって、整合性を確保するために、受信者と共有されるデータのチェックサムを生成するハッシュアルゴリズムが必要です。
MessageDigest
クラスとそのメソッドを使用して MD5 チェックサムを生成するメソッドを理解しました。誤った結果になってしまわないように、データをチャンクで読み取る場合は注意が必要です。