package com.yihu.ehr.util.encrypt; import com.yihu.ehr.util.encode.HexEncode; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import java.lang.reflect.Method; import java.nio.MappedByteBuffer; import java.nio.channels.FileChannel; import java.security.AccessController; import java.security.MessageDigest; import java.security.PrivilegedAction; /** * @created Air 2015/6/2. */ public class MD5 { static public String hash(String str) throws Exception { MessageDigest messageDigest = null; messageDigest = MessageDigest.getInstance("MD5"); messageDigest.reset(); messageDigest.update(str.getBytes()); return HexEncode.toHexString(messageDigest.digest()); } public static String getMd5ByFile(File file) throws FileNotFoundException { String value = null; FileInputStream in = new FileInputStream(file); MappedByteBuffer byteBuffer =null; try { byteBuffer = in.getChannel().map(FileChannel.MapMode.READ_ONLY, 0, file.length()); MessageDigest md5 = MessageDigest.getInstance("MD5"); md5.update(byteBuffer); // BigInteger bi = new BigInteger(1, md5.digest()); // value = bi.toString(16); value= HexEncode.toHexString(md5.digest()); } catch (Exception e) { e.printStackTrace(); } finally { if(null != in) { try { in.close(); clean(byteBuffer); } catch (IOException e) { e.printStackTrace(); } catch (Exception e) { e.printStackTrace(); } } } return value; } public static void clean(final Object buffer) throws Exception { AccessController.doPrivileged(new PrivilegedAction() { public Object run() { try { Method getCleanerMethod = buffer.getClass().getMethod("cleaner", new Class[0]); getCleanerMethod.setAccessible(true); sun.misc.Cleaner cleaner = (sun.misc.Cleaner) getCleanerMethod.invoke(buffer, new Object[0]); cleaner.clean(); } catch (Exception e) { e.printStackTrace(); } return null; } }); } }