package com.joyplus.tvhelper.utils; import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.nio.MappedByteBuffer; import java.nio.channels.FileChannel; import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; public class MD5Util { private static final String TAG = "MD5Util"; protected static char[] hexDigits; protected static MessageDigest messagedigest; static { char[] arrayOfChar = new char[16]; arrayOfChar[0] = 48; arrayOfChar[1] = 49; arrayOfChar[2] = 50; arrayOfChar[3] = 51; arrayOfChar[4] = 52; arrayOfChar[5] = 53; arrayOfChar[6] = 54; arrayOfChar[7] = 55; arrayOfChar[8] = 56; arrayOfChar[9] = 57; arrayOfChar[10] = 97; arrayOfChar[11] = 98; arrayOfChar[12] = 99; arrayOfChar[13] = 100; arrayOfChar[14] = 101; arrayOfChar[15] = 102; hexDigits = arrayOfChar; try { messagedigest = MessageDigest.getInstance("MD5"); } catch (NoSuchAlgorithmException e) { Log.i(TAG, MD5Util.class.getName() + "初始化失败,MessageDigest不支持MD5Util。"); e.printStackTrace(); } } private static void appendHexPair(byte paramByte, StringBuffer paramStringBuffer) { char c1 = hexDigits[((paramByte & 0xF0) >> 4)]; char c2 = hexDigits[(paramByte & 0xF)]; paramStringBuffer.append(c1); paramStringBuffer.append(c2); } private static String bufferToHex(byte[] paramArrayOfByte) { return bufferToHex(paramArrayOfByte, 0, paramArrayOfByte.length); } private static String bufferToHex(byte[] paramArrayOfByte, int paramInt1, int paramInt2) { StringBuffer localStringBuffer = new StringBuffer(paramInt2 * 2); int i = paramInt1 + paramInt2; for (int j = paramInt1;j < i; j++) { appendHexPair(paramArrayOfByte[j], localStringBuffer); } return localStringBuffer.toString(); } public static boolean checkPassword(String paramString1, String paramString2) { return getMD5String(paramString1).equals(paramString2); } public static String getFileMD5String(File paramFile) throws IOException { FileInputStream localFileInputStream = new FileInputStream(paramFile); byte[] arrayOfByte = new byte[1024]; while (true) { int i = localFileInputStream.read(arrayOfByte); if (i <= 0) { localFileInputStream.close(); return bufferToHex(messagedigest.digest()); } messagedigest.update(arrayOfByte, 0, i); } } public static String getFileMD5String_old(File paramFile) throws IOException { FileInputStream fis = new FileInputStream(paramFile); MappedByteBuffer localMappedByteBuffer = fis.getChannel(). map(FileChannel.MapMode.READ_ONLY, 0L,paramFile.length()); messagedigest.update(localMappedByteBuffer); fis.close(); return bufferToHex(messagedigest.digest()); } public static String getMD5String(String paramString) { return getMD5String(paramString.getBytes()); } public static String getMD5String(byte[] paramArrayOfByte) { messagedigest.update(paramArrayOfByte); return bufferToHex(messagedigest.digest()); } public static void main(String[] paramArrayOfString) throws IOException { long l1 = System.currentTimeMillis(); String str = getFileMD5String(new File("C:/12345.txt")); long l2 = System.currentTimeMillis(); System.out.println("md5:" + str + " time:" + (l2 - l1) / 1000L + "s"); } }