Java 中大文件的 MD5 或 SHA 哈希

MD5 or SHA hash of a large file in Java

我需要计算一个大文件的 SHA 或 MD5 哈希值。我需要做的是这个,我举个例子:

假设我有一个 1GB 的文件。 为了计算哈希,我想把这个文件分成 4 个 256MB 的部分(我想把它分成更小的部分)。

1)开始计算第一部分的hash

2)得到第一部分的输出散列,将其与第二部分一起输入并计算第二部分的散列

3)得到2)点的输出hash,与第三部分一起输入,计算第三部分的hash

4)得到3)点的输出hash,与第四部分一起输入,计算整个文件的hash。

我在 google 上搜索了很多,但我什么也没找到 similar.I 通过使用更新方法使用 MessageDigest 阅读我可以读取文件块,直到加载整个文件然后计算哈希但我不明白当我加载一个块时它是否也计算它的哈希(所以它对我来说很好)或者如果它只是一个加载并且哈希是在文件完全结束时计算的已加载。

您可能还想查看 java.security.DigestInputStream 以计算整个文件的哈希值。

如果您需要这些部分的中间散列,您可能会很幸运java.security.MessageDigest.clone();在部分之后克隆用于哈希计算的 MessageDigest 实例,并在克隆上调用 digest() 以获取部分之后的哈希值。

可以使用下一部分的字节更新原始 MessageDigest 实例。