解答例 - 実習課題2 - 10.メッセージダイジェスト
(実習課題2)
サンプルのプログラムを改良し、同時にファイルの中身も表示できるようにすること。ファイルはテキストファイルを対象とすること。
解答例
/**
* CalculateHashValueOfFile.java
* TECHSCORE Java10章 実習課題2
*
* Copyright (c) 2004 Four-Dimensional Data, Inc.
*/
package com.techscore.utility.chapter10.exercise2;
import java.security.DigestInputStream;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.io.FileInputStream;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.FileNotFoundException;
import java.io.IOException;
public class CalculateHashValueOfFile {
public static void main(String[] args) {
if (args.length == 0) {
System.out.println("調べたいファイル名を入力してください。");
System.out.println("Usage:$java com.techscoreutility.chapter10.exercise1.
CalculateHashValue arg1 arg2 ...");
return;
}
try {
System.out.println("■ファイル[" + args[0] + "]の内容");
MessageDigest md = MessageDigest.getInstance("MD5");
DigestInputStream input = new DigestInputStream(new FileInputStream(args[0]), md);
InputStreamReader ir = new InputStreamReader(input, "EUCJP");
BufferedReader readBuffer = new BufferedReader(ir);
System.out.println("■ファイルの中身");
String line;
while((line = readBuffer.readLine()) != null) {
System.out.println(line);
}
byte[] digest = md.digest();
StringBuffer buffer = new StringBuffer();
for(int i = 0; i < digest.length; i++) {
String tmp = Integer.toHexString(digest[i] & 0xff);
if(tmp.length() == 1) {
buffer.append('0').append(tmp);
} else {
buffer.append(tmp);
}
}
System.out.println("■ファイルの中身のハッシュ値");
System.out.println("[0x"+ buffer + "]");
input.close();
} catch(FileNotFoundException e) {
System.err.println("入力された名前のファイルが存在しません。");
} catch(IOException e) {
System.err.println("ファイルの入出力エラーが発生しました。");
} catch(NoSuchAlgorithmException e) {
System.err.println("指定したハッシュ値計算アルゴリズムは存在しません。");
}
}
}
▼ソース
com/techscore/utility/chapter10/exercise2/CalculateHashValueOfFile.javaを表示▼テスト用データ data.txtの中身
a bc def ghi jklm あいうえお 12345 678▼起動例
# java com.techscore.utility.chapter10.exercise2/CalculateHashValueOfFile data.txt▼実行結果
■ファイル[data.txt]の内容 ■ファイルの中身 a bc def ghi jklm あいうえお 12345 678 ■ファイルの中身のハッシュ値 [0xce5523dd6fbf85310c0cf8d2fad07fa9]

