java - Java 中大文件的 MD5 或 SHA 哈希值

标签 java hash md5 sha

我需要计算大文件的 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/

相关文章:

java - 线程在 Java 聊天应用程序中的行为不符合我的要求

java - 检索电话号码的最佳方法?

ruby 哈希 : getting a set of keys from sorted values

php - Bcrypt 哈希检查不起作用

c# - Java MD5 哈希与 C# MD5 哈希不匹配

MySQL 从 md5 密码中删除字符

java - 如何在另一个类的函数中访问一个类的变量?

java泛型歧义

c - 二进制哈希函数族

mysql - 在 SELECT DISTINCT 语句中使用 MYSQL 的 MD5() 操作会忽略 DISTINCT 子句