【问题标题】:Best way to tell if two files are the same?判断两个文件是否相同的最佳方法?
【发布时间】:2009-04-03 15:59:31
【问题描述】:

如果我使用 C# 通过互联网将文件从计算机 A 传输到计算机 B,使用 .NET 进行文件传输的多种方法之一,判断计算机 A 和计算机 B 上的文件是否为一样吗?

我认为 MD5 哈希是一个很好的判断方法。这似乎是一种被广泛接受的说法。但是,我只是仔细检查一下是否没有更好的方法隐藏在 .NET 框架中。

谢谢 托尼

【问题讨论】:

    标签: c# file


    【解决方案1】:

    MD5 是要走的路。

    【讨论】:

      【解决方案2】:

      CRC32 或 Adler32,它们比 MD5 快很多。如果您需要检查文件是否被恶意操纵,您应该使用 MD5。如果没有必要,那就太过分了。

      【讨论】:

      • 这取决于所涉及的计算机 - 我希望大部分时间都花在 IO 上,除非你使用的是非常慢的处理器,所以使用的算法(假设它只需要读取数据一次)不应该有太大的可能性。
      【解决方案3】:

      SHA2 (SHA256, SHA512) 算法优于 MD5 的原因有很多。

      • 它们更能抵抗冲突,这是大文件的一个重要问题。虽然 MD5 可以检测到文件内容的更改,但两个大文件更有可能最终具有相同的 MD5。
      • 它们的计算速度更快。这可能看起来很奇怪,但是芯片组和操作系统实现都加速了 SHA 算法。算法本身也更容易并行化。因此,在 Vista+ 中本机实现的 SHA 或 SHA2 算法比等效的 MD5 算法快得多。
      • 它们使用更大的块大小,这意味着它们可以一次处理大型文件块。处理大文件时,I/O 时间可能会增加。

      .NET 中的本机实现是SHA256Cng、SHA384Cng 和 SHA512Cng。您可以将它们定义为使用配置文件中的< cryptoClass > 元素进行散列时使用的默认算法,而不是显式实例化它们。

      完成后,您只需编写HashAlgorithm.Create()SHA256256.Create() 即可创建本机实例。

      【讨论】:

        猜你喜欢
        • 2012-10-05
        • 2011-03-28
        • 2015-02-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-01-31
        相关资源
        最近更新 更多