转-JAVA获取文件MD5值

 

MessageDigest

http://linyu19872008.iteye.com/blog/1825343

 

JAVA获取文件MD5值

博客分类: 

Java代码  收藏代码
  1. import java.io.File;
  2. import java.io.FileInputStream;
  3. import java.io.IOException;
  4. import java.nio.MappedByteBuffer;
  5. import java.nio.channels.FileChannel;
  6. import java.security.MessageDigest;
  7. import java.security.NoSuchAlgorithmException;
  8. import org.slf4j.Logger;
  9. import org.slf4j.LoggerFactory;
  10. public class MD5FileUtil {
  11.     private static final Logger logger = LoggerFactory
  12.             .getLogger(MD5FileUtil.class);
  13.     protected static char hexDigits[] = { ‘0’‘1’‘2’‘3’‘4’‘5’‘6’,
  14.             ‘7’‘8’‘9’‘a’‘b’‘c’‘d’‘e’‘f’ };
  15.     protected static MessageDigest messagedigest = null;
  16.     static {
  17.         try {
  18.             messagedigest = MessageDigest.getInstance(“MD5”);
  19.         } catch (NoSuchAlgorithmException e) {
  20.             logger.error(“MD5FileUtil messagedigest初始化失败”, e);
  21.         }
  22.     }
  23.     public static String getFileMD5String(File file) throws IOException {
  24.         FileInputStream in = new FileInputStream(file);
  25.         FileChannel ch = in.getChannel();
  26.         MappedByteBuffer byteBuffer = ch.map(FileChannel.MapMode.READ_ONLY, 0,
  27.                 file.length());
  28.         messagedigest.update(byteBuffer);
  29.         return bufferToHex(messagedigest.digest());
  30.     }
  31.     public static String getMD5String(String s) {
  32.         return getMD5String(s.getBytes());
  33.     }
  34.     public static String getMD5String(byte[] bytes) {
  35.         messagedigest.update(bytes);
  36.         return bufferToHex(messagedigest.digest());
  37.     }
  38.     private static String bufferToHex(byte bytes[]) {
  39.         return bufferToHex(bytes, 0, bytes.length);
  40.     }
  41.     private static String bufferToHex(byte bytes[], int m, int n) {
  42.         StringBuffer stringbuffer = new StringBuffer(2 * n);
  43.         int k = m + n;
  44.         for (int l = m; l < k; l++) {
  45.             appendHexPair(bytes[l], stringbuffer);
  46.         }
  47.         return stringbuffer.toString();
  48.     }
  49.     private static void appendHexPair(byte bt, StringBuffer stringbuffer) {
  50.         char c0 = hexDigits[(bt & 0xf0) >> 4];
  51.         char c1 = hexDigits[bt & 0xf];
  52.         stringbuffer.append(c0);
  53.         stringbuffer.append(c1);
  54.     }
  55.     public static boolean checkPassword(String password, String md5PwdStr) {
  56.         String s = getMD5String(password);
  57.         return s.equals(md5PwdStr);
  58.     }
  59.     public static void main(String[] args) throws IOException {
  60.         long begin = System.currentTimeMillis();
  61.         File big = new File(“D:\\temp\\jre-7u11-linux-i586.tar.gz”);
  62.         String md5 = getFileMD5String(big);
  63.         long end = System.currentTimeMillis();
  64.         System.out.println(“md5:” + md5);
  65.         System.out.println(“time:” + ((end – begin) / 1000) + “s”);
  66.     }
  67. }

 

分享到: