1

我正在尝试为整个目录结构计算 SHA-1 校验和。

到目前为止,我所做的是递归地计算每个常规文件的 SHA-1 并将所有校验和附加在一起。问题是这使得计算依赖于遍历文件的顺序

即,如果我有一个包含文件的文件夹

file1.dat file2.dat

和包含相同文件的另一个文件夹,但按顺序排列

file2.dat file1.dat

这将计算不同的校验和。

如何使 SHA-1 计算顺序独立?

谢谢!

4

3 回答 3

2

在计算 SHA-1 或 File[] for File.listFiles 之前,尝试对从 File.list 获得的文件名 String[] 进行排序,File is Comparable。Arrays.sort 就足够了。请注意, File.list / File.listFile 返回的项目没有特定的顺序,尽管它们可能看起来是排序的。

于 2012-12-13T10:56:11.980 回答
0

好吧,既然您已经准备好哈希计算算法,您可以将所有哈希添加到一个 Set(或任何其他不采用重要元素顺序的数据结构)和每个目录中,然后检查集合是否相等

设置类

于 2012-12-13T10:59:07.237 回答
0

您至少有两个选择:

  1. 为目录创建一个存档文件,然后为其创建摘要。(拉链,罐子)

  2. 将所有文件字节读入单字节数组,然后从中创建摘要。

  3. 在创建摘要之前使用您的算法预订数据。

  4. 创建两个摘要列表并进行比较。

就我个人而言,我会选择选项一,既快速又简单。

于 2012-12-13T11:04:54.373 回答