65 lines
1.8 KiB
Java
65 lines
1.8 KiB
Java
|
|
package zutil;
|
||
|
|
|
||
|
|
import java.io.File;
|
||
|
|
import java.io.FileInputStream;
|
||
|
|
import java.io.IOException;
|
||
|
|
import java.io.InputStream;
|
||
|
|
import java.io.Serializable;
|
||
|
|
import java.math.BigInteger;
|
||
|
|
import java.security.MessageDigest;
|
||
|
|
import java.security.NoSuchAlgorithmException;
|
||
|
|
|
||
|
|
import sun.misc.BASE64Encoder;
|
||
|
|
|
||
|
|
public class Hasher {
|
||
|
|
|
||
|
|
/**
|
||
|
|
* Returns a hash of a file
|
||
|
|
*
|
||
|
|
* @param file The path to the file
|
||
|
|
* @param hashType The hash type
|
||
|
|
* @return A String with the hash
|
||
|
|
* @throws NoSuchAlgorithmException
|
||
|
|
* @throws IOException
|
||
|
|
*/
|
||
|
|
public static String hash(File file, String hashType) throws NoSuchAlgorithmException, IOException {
|
||
|
|
MessageDigest digest = MessageDigest.getInstance(hashType);//"MD5"
|
||
|
|
InputStream is = new FileInputStream(file);
|
||
|
|
String output = "";
|
||
|
|
byte[] buffer = new byte[8192];
|
||
|
|
int read = 0;
|
||
|
|
try {
|
||
|
|
while( (read = is.read(buffer)) > 0) {
|
||
|
|
digest.update(buffer, 0, read);
|
||
|
|
}
|
||
|
|
byte[] md5sum = digest.digest();
|
||
|
|
BigInteger bigInt = new BigInteger(1, md5sum);
|
||
|
|
output = bigInt.toString(16);
|
||
|
|
}
|
||
|
|
catch(IOException e) {
|
||
|
|
throw new RuntimeException("Unable to process file for MD5", e);
|
||
|
|
}
|
||
|
|
is.close();
|
||
|
|
|
||
|
|
MultiPrintStream.out.println("File Hash: "+output);
|
||
|
|
return output;
|
||
|
|
}
|
||
|
|
|
||
|
|
/**
|
||
|
|
* Returns the hash of the given object
|
||
|
|
*
|
||
|
|
* @param object The object to hash
|
||
|
|
* @param hashType The hash method
|
||
|
|
* @return String containing the hash
|
||
|
|
* @throws NoSuchAlgorithmException
|
||
|
|
*/
|
||
|
|
public static String hash(Serializable object, String hashType) throws NoSuchAlgorithmException {
|
||
|
|
MessageDigest md = null;
|
||
|
|
md = MessageDigest.getInstance(hashType); //MD5 || SHA
|
||
|
|
md.update(Converter.toBytes(object));
|
||
|
|
|
||
|
|
byte raw[] = md.digest();
|
||
|
|
return (new BASE64Encoder()).encode(raw);
|
||
|
|
}
|
||
|
|
}
|