Zip文件md5校验和 - 每次都不同

时间:2015-02-06 18:32:28

标签: java android md5 message-digest md5-file

我有一个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;
    }

1 个答案:

答案 0 :(得分:0)

我尝试解决同样的问题。我不知道如何解决它,但我知道理由:)。

原因是zip文件至少包含有关文件的时间戳信息。这就是改变你md5sum的原因。每个zip条目都相同,但此元数据信息更改了md5的结果。

可能你已经在其他地方找到答案了。