import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
public class GetMD5 {
/**
* @param buf
* 含Md5码的字节数组
* @return MD5码的十六进制表示,存放在字符串中
*/
public static String ByteArray2String(byte[] buf) {
char hexChar[] = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
'a', 'b', 'c', 'd', 'e', 'f' };
// MD5码由16个字节,128位组成,转换成32个字符
char[] md5 = new char[32];
int k = 0;
for (byte b : buf) {
md5[k++] = hexChar[b >>> 4 & 0xf];
md5[k++] = hexChar[b & 0xf];
}
String md5String = new String(md5);
return md5String;
}
/**
* @param fileName
* 获取MD5码的文件名
* @return md5 该文件 的MD5码
*/
public static String getMD5FromFile(String fileName) {
File file = new File(fileName);
String md5 = null;
try {
MessageDigest md = MessageDigest.getInstance("MD5");
BufferedInputStream in = new BufferedInputStream(
new FileInputStream(file));
byte[] b = new byte[4096];
int c = 0;
c = in.read(b);
while (c >= 0) {
if (c == b.length)
md.update(b);
else
md.update(b, 0, c);
c = in.read(b);
}
in.close();
md5 = ByteArray2String(md.digest());
} catch (Exception e) {
e.printStackTrace();
}
return md5;
}
public static void main(String[] args) {
String fileName = "myFile.rar";
String md5 = getMD5FromFile(fileName);
System.out.println("文件名:" + fileName + "-MD5:" + md5);
}
}