解答例 - 実習課題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]