Skip to content

Instantly share code, notes, and snippets.

@lonly197
Created August 29, 2018 16:21
Show Gist options
  • Save lonly197/ab506694de73ecedde062696e2216a7f to your computer and use it in GitHub Desktop.
Save lonly197/ab506694de73ecedde062696e2216a7f to your computer and use it in GitHub Desktop.
Utility methods for computing MD5 sums.
import com.google.inject.Singleton;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.codec.digest.DigestUtils;
import org.glassfish.jersey.internal.util.Base64;
import java.io.*;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
/**
* Utility methods for computing MD5 sums.
* Created by lonly.
*/
@Slf4j(topic = "Md5Utils")
@Singleton
public class Md5Utils {
private static final int SIXTEEN_K = 1 << 14;
private static MessageDigest messageDigest = null;
static{
try {
messageDigest = MessageDigest.getInstance("MD5");
} catch (NoSuchAlgorithmException e) {
log.error("MD5 messagedigest初始化失败", e);
}
}
/**
* Computes the MD5 hash of the data in the given input stream and returns
* it as an array of bytes.
* Note this method closes the given input stream upon completion.
*/
public static byte[] computeMD5Hash(InputStream is) throws IOException {
BufferedInputStream bis = new BufferedInputStream(is);
try {
byte[] buffer = new byte[SIXTEEN_K];
int bytesRead;
while ((bytesRead = bis.read(buffer, 0, buffer.length)) != -1) {
messageDigest.update(buffer, 0, bytesRead);
}
return messageDigest.digest();
} catch (IllegalArgumentException e) {
// should never get here
throw e;
} finally {
try {
bis.close();
} catch (Exception e) {
log.error(
"Unable to close input stream of hash candidate: " + e);
}
}
}
/**
* Returns the MD5 in base64 for the data from the given input stream.
* Note this method closes the given input stream upon completion.
*/
public static String md5AsBase64(InputStream is) throws IOException {
return Base64.encodeAsString(computeMD5Hash(is));
}
/**
* Computes the MD5 hash of the given data and returns it as an array of
* bytes.
*/
public static byte[] computeMD5Hash(byte[] input) {
return messageDigest.digest(input);
}
/**
* Returns the MD5 in base64 for the given byte array.
*/
public static String md5AsBase64(byte[] input) {
return Base64.encodeAsString(computeMD5Hash(input));
}
/**
* Computes the MD5 of the given file.
*/
public static byte[] computeMD5Hash(File file) throws FileNotFoundException, IOException {
return computeMD5Hash(new FileInputStream(file));
}
/**
* Returns the MD5 in base64 for the given file.
*/
public static String md5AsBase64(File file) throws FileNotFoundException, IOException {
return Base64.encodeAsString(computeMD5Hash(file));
}
public static String getMD5String(String s){
return DigestUtils.md5Hex(s);
}
public static String getMD5String(byte[] bytes) {
return DigestUtils.md5Hex(bytes);
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment