我正在尝试为整个目录结构计算 SHA-1 校验和。
到目前为止,我所做的是递归地计算每个常规文件的 SHA-1 并将所有校验和附加在一起。问题是这使得计算依赖于遍历文件的顺序
即,如果我有一个包含文件的文件夹
file1.dat file2.dat
和包含相同文件的另一个文件夹,但按顺序排列
file2.dat file1.dat
这将计算不同的校验和。
如何使 SHA-1 计算顺序独立?
谢谢!
在计算 SHA-1 或 File[] for File.listFiles 之前,尝试对从 File.list 获得的文件名 String[] 进行排序,File is Comparable。Arrays.sort 就足够了。请注意, File.list / File.listFile 返回的项目没有特定的顺序,尽管它们可能看起来是排序的。
好吧,既然您已经准备好哈希计算算法,您可以将所有哈希添加到一个 Set(或任何其他不采用重要元素顺序的数据结构)和每个目录中,然后检查集合是否相等
您至少有两个选择:
为目录创建一个存档文件,然后为其创建摘要。(拉链,罐子)
将所有文件字节读入单字节数组,然后从中创建摘要。
在创建摘要之前使用您的算法预订数据。
创建两个摘要列表并进行比较。
就我个人而言,我会选择选项一,既快速又简单。