我有一个存储库,用于存储所有图像文件。我知道有很多图像是重复的,我想删除每一个重复的图像。
我想如果我为每个图像文件生成校验和并将文件重命名为其校验和,我可以通过检查文件名轻松找出是否存在重复文件。但问题是,我不能确定选择要使用的校验和算法。例如,如果我使用MD5生成校验和,我是否可以完全信任校验和是否相同,这意味着文件完全相同?
答案 0 :(得分:0)
从安全论坛(https://security.stackexchange.com/a/3145)对类似问题的回答来看,每2 ^ 64条消息的冲突率约为1次。如果您的文件是不同的,并且您的收藏量不大(即接近此数字),则可以安全地使用md5。
此外,请参阅此处对非常相似问题的回复:How many random elements before MD5 produces collisions?
答案 1 :(得分:0)
为2个不同的文件获得相同校验和的可能性非常小,但绝不能绝对保证(Pigeonhole principle)。 GIT使用SHA-1校验和来表示包括Linux在内的软件开发源代码并且从未引起任何已知问题,因此我会说你很安全。我会使用SHA-1而不是MD5,因为如果你真的偏执,它会稍好一些。
答案 2 :(得分:0)
要确保您最好遵循两步程序:首先计算每个文件的校验和。如果校验和不同,则确定文件不相同。如果您碰巧找到一些具有相同校验和的文件,则无法进行逐位比较,以确保它们是否真的完全相同。无论使用何种哈希算法,这都成立。
你会得到一个巨大的节省时间,因为对每一对可能的文件进行逐位比较将花费一天的时间和一天比较一整套可能的候选人是相当容易的。