はじめに
ハッシュ値は、データの整合性を確認する際や、データの一意性を保証するためによく使われます。本記事では、Javaを使って画像データからSHA-256のハッシュ値を算出する方法を紹介します。
1. 前提条件
この記事では以下の環境でコードを実行しています:
- OS:macOS 14.2
- Javaのバージョン:23.0.1
- 画像ファイル:ローカル環境に保存されたサンプル画像
2. サンプルコード
以下は、画像データからSHA-256ハッシュ値を算出するJavaコードの例です。
import java.io.FileInputStream;
import java.io.IOException;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
public class ImageHash {
public static String calculateHash(String filePath) throws NoSuchAlgorithmException, IOException {
// SHA-256アルゴリズムのMessageDigestインスタンスを作成
MessageDigest digest = MessageDigest.getInstance("SHA-256");
FileInputStream fis = new FileInputStream(filePath);
byte[] byteArray = new byte[1024];
int bytesCount = 0;
// ファイルを1024バイトずつ読み込み、ハッシュ値を更新
while ((bytesCount = fis.read(byteArray)) != -1) {
digest.update(byteArray, 0, bytesCount);
}
fis.close();
// 計算したハッシュ値を16進数文字列に変換
StringBuilder sb = new StringBuilder();
for (byte b : digest.digest()) {
sb.append(String.format("%02x", b));
}
return sb.toString();
}
public static void main(String[] args) {
try {
// 画像ファイルのパスを指定
String hash = calculateHash("/Users/xxxx/sample.png"); // 存在するパスを指定すること
System.out.println("Hash: " + hash);
} catch (NoSuchAlgorithmException | IOException e) {
e.printStackTrace();
}
}
}
・サンプルコード中のファイルパス(例: /Users/xxxx/sample.png)は、この記事用の例です。
・自分の環境に存在する画像ファイルのパスに置き換えてください。
3. コードの説明
1. MessageDigest
の利用
-
MessageDigest
クラスは、Java標準ライブラリで提供されるハッシュアルゴリズムを実装するクラスです。 - ここでは、SHA-256アルゴリズムを指定しています。
MessageDigest digest = MessageDigest.getInstance("SHA-256");
2. ファイルの読み込みとハッシュ化
- 画像データを1024バイトずつ読み込み、
digest.update()
を使ってハッシュを更新しています。 - この方法は、大きなファイルでも効率的に処理できます。
while ((bytesCount = fis.read(byteArray)) != -1) {
digest.update(byteArray, 0, bytesCount);
}
3. ハッシュ値を16進数文字列へ変換
-
digest.digest()
メソッドで計算結果を取得し、16進数形式で表示します。
StringBuilder sb = new StringBuilder();
for (byte b : digest.digest()) {
sb.append(String.format("%02x", b));
}
4. 実行方法
- 上記のコードをImageHash.javaという名前で保存する。
- ターミナルやコマンドプロンプトを開き、ファイルが保存されているディレクトリに移動する。
- 以下のコマンドを実行して、プログラムをコンパイル・実行する。
javac ImageHash.java
java ImageHash
5. おわりに
今回の記事では、Javaを使った画像データのハッシュ値算出方法について紹介しました。
ハッシュ値の利用は、セキュリティやデータ管理において非常に重要ですので、参考になったら嬉しいです。