我有一个Android应用程序,它获取zip文件的md5校验和。我用它来比较服务器上的文件和文件。我的问题是每次我尝试为同一个文件生成md5时,校验和是不同的。我在这里发布我的方法。你能告诉我出了什么问题吗?
private static String fileMD5(String filePath) throws NoSuchAlgorithmException, IOException {
InputStream inputStream = null;
try {
inputStream = new FileInputStream(filePath);
byte[] buffer = new byte[1024];
MessageDigest digest = MessageDigest.getInstance("MD5");
int numRead = 0;
while (numRead != -1) {
numRead = inputStream.read(buffer);
if (numRead > 0)
digest.update(buffer, 0, numRead);
}
byte [] md5Bytes = digest.digest();
return convertHashToString(md5Bytes);
} catch (Exception e) {
return "ERROR";
} finally {
if (inputStream != null) {
try {
inputStream.close();
} catch (Exception e) { }
}
}
}
private static String convertHashToString(byte[] md5Bytes) {
String returnVal = "";
for (int i = 0; i < md5Bytes.length; i++) {
returnVal += Integer.toString(( md5Bytes[i] & 0xff ) + 0x100, 16).substring(1);
}
return returnVal;
}
答案 0 :(得分:0)
我尝试解决同样的问题。我不知道如何解决它,但我知道理由:)。
原因是zip文件至少包含有关文件的时间戳信息。这就是改变你md5sum的原因。每个zip条目都相同,但此元数据信息更改了md5的结果。
可能你已经在其他地方找到答案了。