Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/262.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
哈希集中的C#MD5哈希_C#_Hash_Md5 - Fatal编程技术网

哈希集中的C#MD5哈希

哈希集中的C#MD5哈希,c#,hash,md5,C#,Hash,Md5,我对c#比较陌生。我目前正在学习hashset,并且理解hashset不允许hashset中有相同的元素。我的问题是,我是否能够使用md5哈希对目录中的文件进行哈希,并将它们存储在哈希集中,以便以某种方式检查重复的哈希或文件?hashset类是唯一元素的集合。HashSet类的名称空间是System.Collections.Generic。它是在.NET3.5中引入的 让我们以文件为例: static void Main(string[] args) { HashSet<strin

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

hashset
类是唯一元素的集合。HashSet类的名称空间是System.Collections.Generic。它是在.NET3.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();
}
static void Main(字符串[]args)
{
HashSet FileData=新的HashSet();
使用(var md5=md5.Create())
{
使用(var stream=File.OpenRead(“C:\\FolderTest\\Document.txt”))
{
var hash=md5.ComputeHash(流);
var data=BitConverter.ToString(散列).Replace(“-”,”).ToLowerInvariant();
FileData.Add(数据);
}
使用(var stream=File.OpenRead(“C:\\FolderTest\\Document.txt”))
{
var hash=md5.ComputeHash(流);
var data=BitConverter.ToString(散列).Replace(“-”,”).ToLowerInvariant();
FileData.Add(数据);
}
使用(var stream=File.OpenRead(“C:\\FolderTest\\Document2.txt”))
{
var hash=md5.ComputeHash(流);
var data=BitConverter.ToString(散列).Replace(“-”,”).ToLowerInvariant();
FileData.Add(数据);
}
}
foreach(FileData中的var文件)
{
Console.WriteLine(文件);
} 
Console.ReadKey();
}
在上面的代码中,我们创建了一个简单的HashSet类型
HashSet
,并将字符串添加到其中。 如上所述,即使我们尝试添加一个重复的哈希数据字符串,我们也不会得到任何错误,但是当我们迭代集合时,我们找不到该字符串

之后如何比较结果取决于你;你可以转换 例如,将字节数组转换为base64,或者直接比较字节。 (请注意数组不会覆盖Equals。使用base64 正确操作更简单,但如果您确实 只对比较散列感兴趣。)

哈希集的特征

  • 当我们向
    HashSet添加元素时
    会自动增加 HashSet的容量
  • 它用于我们希望防止重复出现的情况 正在插入到集合中
  • HashSet提供了许多数学集合操作,例如set 加法(并集)和集减法

@Viv在C#中有n种加密和解密方法。如果你在任何地方卡住了,就把你的代码片段编出来,小心。此外,hashset和MD5相似但不同。检查相等性是一个两步工作流程。首先,检查两个事物的散列是否相等。如果不是,你可以非常肯定,事情是不同的。但是你不能确定他们是平等的。为此,您需要执行更深入的平等性检查。对于文件,您可能需要比较每个字节。因此,散列被用来快速剔除大量确定的“不等于”。另请参见@John MD5生成128位散列值。(与guid大小相同)因此两个不同的文件生成相同的哈希值的可能性极低。@Magnus确实不太可能,但这是一个重要的区别,特别是如果OP对哈希值应用相同的逻辑,从而在将来生成更小的结果。