取文件MD5的应用
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 {/*** 默认的密码字符串组合,apache校验下载的文件的正确性用的就是默认的这个组合*/protected static char hexDigits[] = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9','a', 'b', 'c', 'd', 'e', 'f' };protected static MessageDigest messagedigest = null;static{ try{ messagedigest = MessageDigest.getInstance("MD5"); }catch(NoSuchAlgorithmException nsaex){ System.err.println(MD5Util.class.getName()+"初始化失败,MessageDigest不支持MD5Util。"); nsaex.printStackTrace(); }} /*** 适用于上G大的文件* @param file* @return* @throws IOException* 此方法慎用,FileChannel.map后不会释放资源,会导致文件被锁定*/public static String getFileMD5String(File file) throws IOException { FileInputStream in = new FileInputStream(file); FileChannel ch = in.getChannel(); MappedByteBuffer byteBuffer = ch.map(FileChannel.MapMode.READ_ONLY, 0, file.length()); messagedigest.update(byteBuffer); String md5Str = bufferToHex(messagedigest.digest()); byteBuffer.flip(); ch.close(); in.close(); return md5Str; } public static String MD5File(File file) { byte[] buf = new byte[4096]; //这个byte[]的长度可以是任意的。 MessageDigest md; boolean fileIsNull = true; try { FileInputStream fis = new FileInputStream(file); int len = 0; md = MessageDigest.getInstance("MD5"); len = fis.read(buf); if (len > 0) { fileIsNull = false; while (len > 0){ md.update(buf, 0, len); len = fis.read(buf); } } fis.close(); } catch (Exception e) { return null; } if (fileIsNull) return null; else return bufferToHex(md.digest());}public static String getMD5String(String s) { return getMD5String(s.getBytes());} public static String getMD5String(byte[] bytes) { messagedigest.update(bytes); return bufferToHex(messagedigest.digest());} private static String bufferToHex(byte bytes[]) { return bufferToHex(bytes, 0, bytes.length);} private static String bufferToHex(byte bytes[], int m, int n) { StringBuffer stringbuffer = new StringBuffer(2 * n); int k = m + n; for (int l = m; l < k; l++) { appendHexPair(bytes[l], stringbuffer); } return stringbuffer.toString();} private static void appendHexPair(byte bt, StringBuffer stringbuffer) { char c0 = hexDigits[(bt & 0xf0) >> 4]; char c1 = hexDigits[bt & 0xf]; stringbuffer.append(c0); stringbuffer.append(c1);} public static boolean checkPassword(String password, String md5PwdStr) { String s = getMD5String(password); return s.equals(md5PwdStr);} }
?