.zip
是否可以为java中的文件生成 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(); }