我需要计算大文件的 SHA 或 MD5 哈希值。我需要做的事情是这样的,我举个例子:
假设我有一个 1GB 的文件。 为了计算哈希值,我想把这个文件分成 4 个 256MB 的部分(我想把它分成更小的部分)。
1)开始计算第一部分的哈希
2)获取第一部分的输出哈希,将其与第二部分一起输入并计算第二部分的哈希
3)获取2)点的输出哈希,将其与第三部分一起输入并计算第三部分的哈希
4)获取第3)点的输出哈希值,将其与第四部分一起输入,并计算整个文件的哈希值。
我在谷歌上搜索了很多,但没有找到类似的东西。我通过使用方法 update 阅读了 MessageDigest,我可以读取文件 block ,直到加载整个文件,然后计算哈希值,但我不明白当我加载一个 block 时,它是否也计算它的哈希值(所以在我的情况下会很好),或者如果它只是一个加载,并且在文件完全加载时计算哈希值。
最佳答案
您可能还想查看java.security.DigestInputStream
来计算整个文件的哈希值。
如果您需要这些部分的中间哈希值,您可能会幸运地使用java.security.MessageDigest.clone()
;在一个部分之后,克隆用于哈希计算的 MessageDigest 实例,并在克隆上调用 digest()
以获取该部分之后的哈希值。
原始 MessageDigest 实例可以使用下一部分的字节进行更新。
关于java - Java 中大文件的 MD5 或 SHA 哈希值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32759956/