【问题标题】:How to find out if two binary files are exactly the same如何判断两个二进制文件是否完全相同
【发布时间】:2013-02-08 07:47:31
【问题描述】:

我有一个存储库,用于存储我的所有图像文件。我知道有很多重复的图像,我想删除每一个重复的图像。

我想如果我为每个图像文件生成校验和并将文件重命名为其校验和,我可以通过检查文件名轻松找出是否有重复的。但问题是,我无法确定选择要使用的校验和算法。例如,如果我使用 MD5 生成校验和,我是否可以完全相信校验和是否相同,这意味着文件完全相同?

【问题讨论】:

    标签: md5 checksum


    【解决方案1】:

    从安全论坛 (https://security.stackexchange.com/a/3145) 中对类似问题的回复来看,碰撞率约为每 2^64 条消息 1 次碰撞。如果您的文件不同,并且您的收藏量不大(即接近这个数字),则可以安全地使用 md5。

    另外,请参阅此处对非常相似的问题的回复:How many random elements before MD5 produces collisions?

    【讨论】:

      【解决方案2】:

      为 2 个不同的文件获得相同校验和的可能性非常小,但不能绝对保证 (Pigeonhole principle)。一个迹象表明 GIT 对包括 Linux 在内的软件开发源代码使用 SHA-1 校验和并且从未引起任何已知问题,所以我会说你是安全的。我会使用 SHA-1 而不是 MD5,因为如果你真的很偏执,它会稍微好一些。

      【讨论】:

      • “如果你真的偏执会稍微好一点”你描述我的态度很好:)谢谢:)
      • SHA-1 是 160 位,而 MD5 是 128 位。因此 SHA-1 的结果会更加独特,但计算时间会稍微长一些。如果你想要更长的哈希值,你可以使用 SHA-256 之类的东西,它更长,计算速度更慢。
      【解决方案3】:

      为了确保您最好遵循两步程序:首先计算每个文件的校验和。如果校验和不同,您确定文件不相同。如果您碰巧发现一些具有相同校验和的文件,则无法进行逐位比较以 100% 确定它们是否真的相同。这与使用的散列算法无关。

      您将节省大量时间,因为对每对可能的文件进行逐位比较将花费很长时间和一天的时间,而比较一手可能的候选人则相当容易。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-05-14
        • 1970-01-01
        • 2015-02-07
        • 1970-01-01
        • 2021-11-24
        • 1970-01-01
        • 2023-04-07
        相关资源
        最近更新 更多