哈希集中的C#MD5哈希

时间:2019-08-14 06:25:27

标签: c# hash md5

我对C#比较陌生。我目前正在学习哈希集,并了解哈希集不允许在哈希集中使用相同的元素。我的问题是我是否可以使用md5哈希对目录中的文件进行哈希处理并将它们存储在哈希集中,以便可以某种方式检查重复的哈希或文件?

1 个答案:

答案 0 :(得分:2)

HashSet<T>类是唯一元素的集合。 HashSet类的名称空间是 System.Collections.Generic 。它是在 .NET 3.5 中引入的。

以文件为例:

static void Main(string[] args)
{
    HashSet<string> FileData = new HashSet<string>();
    using (var md5 = MD5.Create())
    {
         using (var stream = File.OpenRead("C:\\FolderTest\\Document.txt"))
         {
              var hash = md5.ComputeHash(stream);
              var data = BitConverter.ToString(hash).Replace("-", "").ToLowerInvariant();
              FileData.Add(data);
         }
         using (var stream = File.OpenRead("C:\\FolderTest\\Document.txt"))
         {
              var hash = md5.ComputeHash(stream);
              var data = BitConverter.ToString(hash).Replace("-", "").ToLowerInvariant();
              FileData.Add(data);
         }
         using (var stream = File.OpenRead("C:\\FolderTest\\Document2.txt"))
         {
              var hash = md5.ComputeHash(stream);
              var data = BitConverter.ToString(hash).Replace("-", "").ToLowerInvariant();
              FileData.Add(data);
         }
    }
    foreach (var file in FileData)
    {
         Console.WriteLine(file);
    } 
    Console.ReadKey();
}

在上面的代码中,我们创建了一个简单的HashSet类型HashSet<string>,并将字符串添加到其中。 鉴于以上所述,即使我们尝试添加重复的哈希数据字符串,也不会出现任何错误,但是在迭代集合时,我们找不到该字符串。

  

以后如何比较结果取决于您自己;你可以转换   例如,将字节数组设置为base64,或者直接比较字节。   (请注意,数组不会覆盖Equals。使用base64是   更容易上手,但如果您确实很有效   只对比较哈希值感兴趣。)see these answers

哈希集的特征

  • 当我们向HashSet<T>添加元素时,它会自动增加 HashSet的容量。
  • 用于我们要防止重复的情况 被插入到集合中。
  • HashSet提供许多数学设置操作,例如set 加法(联合)并设置减法。