5

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

我想知道当我们解压缩数据,编辑文件,再次压缩它并找到哈希时,它会与原始的不同吗?

4

1 回答 1

6

您可以为任意文件创建 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(); }
于 2015-07-07T11:37:55.613 回答