ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Runnable을 활용한 파일의 해시값 계산
    java/jca 2019. 6. 24. 15:13
    package jce;
    
    import java.io.FileInputStream;
    import java.security.DigestInputStream;
    import java.security.MessageDigest;
    
    public class InstanceCallbackDigest implements Runnable{
    	private String filename;
    	private InstanceCallbackDigestUserInterface callback;
    	
    	public InstanceCallbackDigest(String filename, InstanceCallbackDigestUserInterface callback) {
    		this.filename = filename;
    		this.callback = callback;
    	}
    	
    	@Override
    	public void run() {
    		try {
    			FileInputStream in  = new FileInputStream(filename);
    			MessageDigest sha = MessageDigest.getInstance("SHA-256");
    			DigestInputStream din  = new DigestInputStream(in, sha);
    			while(din.read() != -1);//파일 전체를 읽는다.
    			din.close();
    			byte[] digest = sha.digest();
    			callback.receveDigest(digest);
    		} catch (Exception e) {
    			System.err.println(e);
    		}
    		
    			
    	}
    	
    }
    
    package jce;
    
    import java.util.Arrays;
    
    import javax.swing.plaf.synth.SynthScrollBarUI;
    import javax.xml.bind.DatatypeConverter;
    
    public class InstanceCallbackDigestUserInterface {
    	private String filename;
    	private byte[] digest;
    	
    	public InstanceCallbackDigestUserInterface(String filename) {
    		super();
    		this.filename = filename;
    	}
    	
    	public void calculateDigest(){
    		InstanceCallbackDigest cb = new InstanceCallbackDigest(filename, this);
    		Thread t = new Thread(cb);
    		t.start();
    	}
    	
    	void receveDigest (byte[] digest){
    		this.digest = digest;
    		System.out.println(this);
    	}
    
    	@Override
    	public String toString() {
    		String result = filename+": ";
    		if(digest != null){
    			result+= DatatypeConverter.printHexBinary(digest);
    		}else{
    			result += "digest not available";
    		}
    		
    		return result;
    	}
    	public static void main(String[] args) {
    		for(String filename: args){
    			//다이제스트 계산 
    			InstanceCallbackDigestUserInterface d = new InstanceCallbackDigestUserInterface(filename);
    			d.calculateDigest();
    		}
    	}
    	
    }
    
Designed by Tistory.