zip文件的MD5哈希

时间:2015-07-07 11:35:48

标签: java zip md5-file

是否可以为java中的.zip文件生成MD5哈希值?我找到的所有示例都是.txt个文件。

我想知道什么时候我们解压缩数据,编辑文件,再压缩它并找到哈希值,它会不同于原始数据?

1 个答案:

答案 0 :(得分:4)

您可以为任意文件创建MD5哈希值,与文件类型无关。哈希只需要任何字节流,并且根本不解释它的含义。因此,您可以使用为.txt文件找到的示例并将它们应用于.zip文件。

是的,编辑.zip内的文件很可能会改变.zip文件的MD5 - 即使由于哈希冲突而无法保证。但这只是哈希的一般属性,与拉链无关。

但请注意,即使内容更改,重新传输文件也可能会更改MD5哈希值。这是因为即使解压缩的文件与以前相同,压缩文件也可能因使用的压缩算法及其参数而异。

编辑(根据您的评论)

如果要避免在重新压缩时更改MD5哈希值,则必须在解压缩的文件上运行MD5。您可以在不实际将文件写入磁盘的情况下即时执行此操作,只需使用流即可。 ZipInputStream可以帮助您。一个简单的代码示例:

    InputStream theFile = new FileInputStream("example.zip");
    ZipInputStream stream = new ZipInputStream(theFile);
    try
    {
        ZipEntry entry;
        while((entry = stream.getNextEntry()) != null)
        {
            MessageDigest md = MessageDigest.getInstance("MD5");
            DigestInputStream dis = new DigestInputStream(stream, md);
            byte[] buffer = new byte[1024];
            int read = dis.read(buffer);
            while (read > -1) {
                read = dis.read(buffer);
            }
            System.out.println(entry.getName() + ": "
                    + Arrays.toString(dis.getMessageDigest().digest()));
        }
    } finally { stream.close(); }