Created
August 29, 2018 16:21
-
-
Save lonly197/ab506694de73ecedde062696e2216a7f to your computer and use it in GitHub Desktop.
Utility methods for computing MD5 sums.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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