gpt4 book ai didi

java - 压缩文件的 MD5 散列

转载 作者:搜寻专家 更新时间:2023-10-31 20:01:26 26 4
gpt4 key购买 nike

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

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

最佳答案

您可以为任意文件创建 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(); }

关于java - 压缩文件的 MD5 散列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31267483/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com