从MD5哈希而不是字符串创建Guid是否有效?

时间:2019-04-05 10:12:22

标签: c# .net hash md5

我正在尝试实现一种检测重复文件的方法。我有一个 MD5 哈希方法(让我们忽略 MD5 损坏的事实),如下所示:

using(MD5 hasher = MD5.Create())
using(FileStream fs = File.OpenRead("SomeFile"))
{
    byte[] hashBytes = hasher.ComputeHash(fs);
    string hashString = string.Join(string.Empty, hashBytes.Select(x => x.ToString("X2"))); 
}

除了从string中创建hashBytes之外,我还可以像这样从中创建Guid吗?

Guid hashGuid = new Guid(hashBytes);

它仍然有效还是会失去唯一性?

3 个答案:

答案 0 :(得分:2)

MD5散列和Guid 基本上都表示128位二进制,所以:

  • plus:您不会失去任何独特性
  • plus:Guid是一种值类型这一事实意味着与string相比,您避免了分配...
  • 减号:...但是,如果您要在任何地方 display 进行显示,则实际上可能最终分配了 multiple 个字符串(即呈现相同的{{1} }多次)
  • 减号:Guid有一个语义含义,在这里并不会真正得到尊重/期望
  • 减:Guid的默认格式与通常表示MD5哈希的方式不同
  • 减号:Guid的字节序是混乱,因此,如果您想在原始字节和任何文本表示之间取舍,请小心地非常;这是不是您所期望的

答案 1 :(得分:0)

不确定这是否是最好的主意,但是由于两个值均为128位,因此您不会丢失任何数据,假设您没有尝试转换MD5的文本表示形式

只需将MD5字节直接转换为GUID,而无需先将其转换为string

答案 2 :(得分:-1)

只有通过调用Guid.NewGuid()正确生成向导,向导才能保证其唯一性。通过从MD5字节构造Guid,您将获得零唯一性。您只能将字节存储在名为“全局唯一IDentifier”的数据结构中,该数据结构可能不是唯一的。

进行此实验:为两个向导使用相同的字节数组。您是否希望Guid有所不同或相等?