import java.io.*;
import java.security.*;
import java.util.*;

public class MD5 {
	public static void main(String args[]) {
		if (args.length!=1) {
			System.out.println("Usage: MD5 <name_of_file_to_sign>");
			System.exit(0);
		}
		try {
			long start = System.currentTimeMillis();

			// Create a message digest object
			MessageDigest md5 = MessageDigest.getInstance("MD5","SUN");
			
			// Update with the message
			FileInputStream fis = new FileInputStream(args[0]);
			BufferedInputStream bis = new BufferedInputStream(fis);
			byte buffer[] = new byte[1024];
			int length;
			while(bis.available() != 0){
				length = bis.read(buffer);
				md5.update(buffer,0,length);
			}
			bis.close();
			
			// generate digest
			byte[] messageDigest = md5.digest();

			long end = System.currentTimeMillis();
			System.out.println("Total elapsed time= "+ (end-start) );

			// save digest to file		
			FileOutputStream fos = new FileOutputStream(args[0]+".md5");
			fos.write(messageDigest);
			fos.close();

		} catch(Exception e) {
			e.printStackTrace();
		}

		
	}

}
