最近遇到需要在java程序中获取Linux下件MD5值的问题,首先想到的是通过使用shell脚本命令"md5sum filename"是最简单的,查阅资料后发现可以这样实现java调用Linux的shell命令:
public String getMd5(String filename){
//此处的md5sum可以换成其他想要执行的命令,
//如String cmd[] = new String[]{"touch","file"};
String cmd[] = new String[]{"md5sum",filename};
Process pro = Runtime.getRuntime().exec(cmd);
//读取命令执行的结果
InputStreamReader input = new InputStreamReader(pro.getInputStream);
BufferedReader reader = new BufferedReader();
//md5的值为32位
char[] cbuf = new char[32];
//read(char[] cbuf, int off, int len)
//cbuf为存储区,off为偏移,表示从第几个字节开始读取,len表示读取的长度
reader.read(cbuf, 0, 32);
return String.ValueOf(cbuf);
}
同时,通过java自带的MessageDigest类也可以实现获取MD5值的方法:
public String getMd5(String fname) throws NoSuchAlgorithmException, IOException{
MessageDigest md5 = MessageDigest.getInstance("md5");
FileInputStream fins = new FileInputStream(fname);
byte[] data = new byte[buffersize];
int nread = 0;
while((nread = fins.read(data)) != -1)
md5.update(data, 0, nread);
byte[] md5data = md5.digest();
StringBuffer sb = new StringBuffer();
for(int i=0; i<md5data.length; i++)
sb.append(Integer.toString((md5data[i]&0xff) + 0x100, 16).substring(1));
return sb.toString();
}