Javaによるメッセージの概要の取得


メッセージの概要
メッセージ要約アルゴリズムの主な特徴は、暗号化プロセスに鍵が不要であり、暗号化されたデータが復号できないことであり、同じ明文データを入力して同じメッセージ要約アルゴリズムを通過してこそ、同じ暗号文を得ることができる.メッセージ要約アルゴリズムは鍵の管理と配布の問題がなく,分散ネットワークと同様に使用するのに適している.その暗号化計算のワークロードはかなり大きいため、従来のアルゴリズムは通常、データ量が限られている場合の暗号化にのみ使用され、例えば、コンピュータのパスワードは不可逆暗号化アルゴリズムで暗号化されている.近年、コンピュータの同じ性能の急速な改善に伴い、暗号化速度はこのような暗号化技術の発展を制限する束縛となっていないため、メッセージ要約アルゴリズムの応用分野は増加している.現在、メッセージ要約アルゴリズムは、明文の要約アルゴリズムとして「デジタル署名」の分野で主に適用されている.有名な要約アルゴリズムにはRSA社のMD 5アルゴリズムとSHA-1アルゴリズムとその大量の変体がある.メッセージの要約が返すこれらのビットは、でたらめに寄せられているように見えます.大量の入力で出力が同じかどうかを検証できます.一般的に、異なる入力には異なる出力があり、出力された要約メッセージはランダムに検証できます.しかし、1つの要約は本当にランダムではありません.同じアルゴリズムで同じメッセージに対して2回の要約を求めると、その結果は必然的に同じになります.本当にランダムであれば、どうしても再現できません.したがって、メッセージの要約は「擬似ランダム」です.
予知専門のアルゴリズムの紹介は、専門書を参考にする必要があります.
システムがサポートするメッセージサマリーアルゴリズムを特定
package date0803;
/**
 *              
 */
import java.security.Security;

public class PrintMessageDigestAlgorithmsAvailable {

	public static void main(String[] args) {
		System.out.println("---------            --------");
	    for (String s : Security.getAlgorithms("MessageDigest")) {
	      System.out.println(s);
	    }
	}

}
でサポートされているアルゴリズムは、
---------            --------
SHA-384
SHA-224
SHA-256
MD2
SHA
SHA-512
MD5
です.
メッセージの要約を取得するスレッドの作成
package date0803;
/**
 *                 
 *     ,             
 * @author zzw922cn
 */
import java.io.FileInputStream;
import java.io.IOException;
import java.security.DigestInputStream;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;

import javax.xml.bind.DatatypeConverter;

public class FileDigestThread extends Thread {

	
	private String filename;

	/**
	 * 
	 * @param filename    
	 */
	public FileDigestThread(String filename) {
		super();
		this.filename = filename;
	}

	/**
	 *        
	 */
	@Override
	public void run() {
		try {
			//     
			FileInputStream fileInputStream = new FileInputStream(filename);
			
			//    ,         
			MessageDigest instance = MessageDigest.getInstance("SHA");
//			MessageDigest instance = MessageDigest.getInstance("SHA-512");
//			MessageDigest instance = MessageDigest.getInstance("SHA-384");
//			MessageDigest instance = MessageDigest.getInstance("SHA-256");
//			MessageDigest instance = MessageDigest.getInstance("SHA-224");
//			MessageDigest instance = MessageDigest.getInstance("MD5");
//			MessageDigest instance = MessageDigest.getInstance("MD2");
			
			
			//       ,               
			DigestInputStream digestInputStream = new DigestInputStream(fileInputStream, instance);
			
			//    ,      ,     
			while(digestInputStream.read()!=-1)
				;
			digestInputStream.close();
			
			//         ,  digest()        ,      
			byte[] digest = instance.digest();
			
			//        ,        
			StringBuilder stringBuilder = new StringBuilder(filename);
			String algorithm = instance.getAlgorithm();
			stringBuilder.append("(algorithm:"+algorithm+"):");
			//           
			stringBuilder.append(DatatypeConverter.printHexBinary(digest));
			
			//        
			System.out.println(stringBuilder.toString());
		
		}catch(IOException ex) {
			System.err.println(ex);
		} catch (NoSuchAlgorithmException ex) {
			System.err.println(ex);
		}
	}
}

インスタンスの実行
package date0803;

import java.io.File;

public class Test1 {

	public static void main(String[] args) {
		File file = new File("E:\\      PPT");
		File[] listFiles = file.listFiles();
		
		//    ,      ,    
		for(File subfile:listFiles) {
			String absolutePath = subfile.getAbsolutePath();
			Thread fileDigestThread = new FileDigestThread(absolutePath);
			fileDigestThread.start();
		}
	}

}

実行結果
E:\      PPT\4LANG.pdf(algorithm:SHA):175561E04F5A14DE82A5557C0EA036831EA5633A
E:\      PPT\1intro.pdf(algorithm:SHA):0F8D1449BA7C195BF7AAADC1351ED02882F7B579
E:\      PPT\3PREP.pdf(algorithm:SHA):C85278213C0D649355870E6D637D5198DD73B33B
E:\      PPT\5DESC.pdf(algorithm:SHA):58A7F200CDDDA44D09E1F5514C8AA279E3E6E3FE
E:\      PPT\2dw.pdf(algorithm:SHA):15D08FD207C2A680A529C7C18D847CC455E2080A
E:\      PPT\7CLASS.pdf(algorithm:SHA):61CEB6DA12E75AF81EE84B15CBE2E4D23782993B
E:\      PPT\8CLST.pdf(algorithm:SHA):B6AFE6FC67EE89E89860B7CF13B9550B9DCDF4FE
E:\      PPT\10APPL.pdf(algorithm:SHA):8C6429D5A1DB0D8CE4DF8D9933C2A08FE0065976
E:\      PPT\6ASSO.pdf(algorithm:SHA):4D04780EBB487C1AA014C631A5E5CB5305E6EE31
E:\      PPT\9CMPLX.pdf(algorithm:SHA):B135431328FDC5ABC965C01B0FD126C21533F5EB