判断两个文件是否相同的最佳方法?

时间:2009-04-03 15:59:31

标签: c# file

如果我使用C#通过互联网将文件从计算机A转移到计算机B,使用.NET中的一种方法进行文件传输,那么判断计算机A和计算机B上的文件是否是最佳方法的最佳方法是什么?一样吗?

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

谢谢 贝

3 个答案:

答案 0 :(得分:7)

MD5是要走的路。

答案 1 :(得分:3)

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

答案 2 :(得分:2)

出于多种原因,SHA2(SHA256,SHA512)算法优于MD5。

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

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

执行此操作后,您只需编写HashAlgorithm.Create()SHA256256.Create()即可创建本机实例。