计算C#中文件内容的哈希值?

时间:2013-05-01 12:29:47

标签: c#

我需要计算C#中文件内容的哈希值?所以,我可以在我的应用程序中比较两个文件哈希值。我有搜索但没找到。

2 个答案:

答案 0 :(得分:20)

您可以使用MD5CryptoServiceProvider,它可以处理基于文本的文件以及二进制文件。

byte[] myFileData = File.ReadAllBytes(myFileName);
byte[] myHash = MD5.Create().ComputeHash(myFileData);

或者......如果您使用大文件而不想将整个文件加载到内存中:

byte[] myHash;
using (var md5 = MD5.Create())
using (var stream = File.OpenRead(myFileName))
    myHash = md5.ComputeHash(stream);

您可以使用Enumerable.SequenceEqual

与两个文件中的字节数组进行比较
myHash1.SequenceEqual(myHash2); 

您也可以尝试创建CRC计算器。请参阅:http://damieng.com/blog/2006/08/08/calculating_crc32_in_c_and_net

答案 1 :(得分:5)

你应该更好地搜索;)

using System.IO;
using System.Text;
using System.Security.Cryptography;


protected string GetMD5HashFromFile(string fileName)
{
  FileStream file = new FileStream(fileName, FileMode.Open);
  MD5 md5 = new MD5CryptoServiceProvider();
  byte[] retVal = md5.ComputeHash(file);
  file.Close();

  StringBuilder sb = new StringBuilder();
  for (int i = 0; i < retVal.Length; i++)
  {
    sb.Append(retVal[i].ToString("x2"));
  }
  return sb.ToString();
}

将您的文件传递给此函数。

GetMD5HashFromFile("text1.txt");
GetMD5HashFromFile("text2.txt");