因?yàn)轫?xiàng)目原因播瞳,發(fā)現(xiàn)同事寫的代碼獲取的MD5值少了一位锹雏。MD5是32個(gè)數(shù)字的,然后...
百度搜索出來的文章前面幾個(gè)獲取MD5的方法都存在一個(gè)問.題
md5字符串最前面的數(shù)字是0的,轉(zhuǎn)成字符串后會(huì)省略袄秩。
然后我搜“android獲取MD5值”出來的第一篇文章也有同樣問題》瓴ⅲ可能運(yùn)氣問題之剧,這MD5值第一位不一定為0,也就沒人發(fā)現(xiàn)這個(gè)問題了砍聊。
正確姿勢(shì)
我直接上代碼了
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;
}