package info.mineshafter.crypto; import java.io.IOException; import java.io.InputStream; import java.math.BigInteger; import java.security.DigestInputStream; import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; public class Hash { public static String md5(InputStream input) { return hash("MD5", input); } public static String md5(byte[] input) { return hash("MD5", input); } public static String md5(String input) { return hash("MD5", input.getBytes()); } public static String sha1(InputStream input) { return hash("SHA-1", input); } public static String sha1(byte[] input) { return hash("SHA-1", input); } private static String hash(String algorithm, InputStream input) { DigestInputStream stream; try { stream = new DigestInputStream(input, MessageDigest.getInstance(algorithm)); } catch (NoSuchAlgorithmException e) { e.printStackTrace(); return ""; } byte[] buffer = new byte[8192]; try { while (stream.read(buffer) != -1) {} stream.close(); } catch (IOException e) { e.printStackTrace(); return ""; } return String.format("%1$032x", new Object[] { new BigInteger(1, stream.getMessageDigest().digest()) }); } private static String hash(String algorithm, byte[] input) { try { MessageDigest sha1 = MessageDigest.getInstance(algorithm); sha1.update(input); byte[] hashBytes = sha1.digest(); StringBuilder sb = new StringBuilder(); for (int i = 0; i < hashBytes.length; i++) { sb.append(Integer.toString((hashBytes[i] & 0xff) + 0x100, 16).substring(1)); } String fileHash = sb.toString(); return fileHash; } catch (NoSuchAlgorithmException ex) { ex.printStackTrace(); return ""; } } }