因为项目原因,发现同事写的代码获取的MD5值少了一位。MD5是32个数字的,然后...
百度搜索出来的文章前面几个获取MD5的方法都存在一个问.题
md5字符串最前面的数字是0的,转成字符串后会省略。
然后我搜“android获取MD5值”出来的第一篇文章也有同样问题。可能运气问题,这MD5值第一位不一定为0,也就没人发现这个问题了。
正确姿势
我直接上代码了
public static String getFileMD5(File file) {
if (!file.isFile())
return null;
InputStream fis = null;
try {
fis = new FileInputStream(file);
byte[] buffer = new byte[1024];
MessageDigest complete = MessageDigest.getInstance("MD5");
int numRead;
do {
numRead = fis.read(buffer);
if (numRead > 0) {
complete.update(buffer, 0, numRead);
}
} while (numRead != -1);
fis.close();
byte[] b = complete.digest();
StringBuilder result = new StringBuilder();
for (byte value : b) {
result.append(Integer.toString((value & 0xff) + 0x100, 16).substring(1));
}
return result.toString();
} catch (NoSuchAlgorithmException | IOException e) {
e.printStackTrace();
}finally {
if(fis !=null){
try {
fis.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
return null;
}
网友评论