压缩文件的 MD5 散列

MD5 hash for zip files

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

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

您可以为任意文件创建 MD5 散列,与文件类型无关。散列仅采用 any 字节流,根本不解释其含义。因此,您可以使用为 .txt 文件找到的示例并将它们应用于 .zip 文件。

是的,编辑 .zip 文件中的文件很可能会更改 .zip 文件的 MD5 - 尽管由于散列冲突,这并不能保证。但这只是一般的 属性 哈希值,与压缩无关。

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

编辑(根据您的评论)

如果你想避免在重新压缩时更改 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(); }