是否可以为java中的.zip
文件生成MD5哈希值?我找到的所有示例都是.txt
个文件。
我想知道什么时候我们解压缩数据,编辑文件,再压缩它并找到哈希值,它会不同于原始数据?
答案 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(); }