/*****************************************************************/ /* Copyright 2013 Code Strategies */ /* This code may be freely used and distributed in any project. */ /* However, please do not remove this credit if you publish this */ /* code in paper or electronic form, such as on a web site. */ /*****************************************************************/ package test; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; import java.util.Date; import org.apache.commons.codec.binary.Hex; public class MessageDigestTest { public static void main(String[] args) { try { String file = "httpd-2.2.6-win32-src-r2.zip"; MessageDigest md = MessageDigest.getInstance("MD5"); getDigestViaByteArray(new FileInputStream(file), md, 128); getDigestViaByteArray(new FileInputStream(file), md, 256); getDigestViaByteArray(new FileInputStream(file), md, 512); getDigestViaByteArray(new FileInputStream(file), md, 1024); getDigestViaByteArray(new FileInputStream(file), md, 2048); getDigestViaByteArray(new FileInputStream(file), md, 4096); getDigestViaByteArray(new FileInputStream(file), md, 8192); getDigestViaOneByteAtATime(new FileInputStream(file), md); } catch (Throwable e) { e.printStackTrace(); } } public static String getDigestViaByteArray(InputStream is, MessageDigest md, int arraySize) throws NoSuchAlgorithmException, IOException { Date t1 = new Date(); md.reset(); byte[] bytes = new byte[arraySize]; int numBytes; while ((numBytes = is.read(bytes)) != -1) { md.update(bytes, 0, numBytes); } byte[] digest = md.digest(); String result = new String(Hex.encodeHex(digest)); Date t2 = new Date(); System.out.println("MD5 Digest:" + result); System.out.print("Using byte array (size " + arraySize + "): "); System.out.println((t2.getTime() - t1.getTime()) + " milliseconds\n"); return result; } public static String getDigestViaOneByteAtATime(InputStream is, MessageDigest md) throws NoSuchAlgorithmException, IOException { Date t1 = new Date(); md.reset(); int oneByte; while ((oneByte = is.read()) != -1) { md.update((byte) oneByte); } byte[] digest = md.digest(); String result = new String(Hex.encodeHex(digest)); Date t2 = new Date(); System.out.println("MD5 Digest:" + result); System.out.print("One byte at a time: "); System.out.println((t2.getTime() - t1.getTime()) + " milliseconds\n"); return result; } }