是用MD5哈希创建一个Guid而不是String有效吗?

问题描述 投票:1回答:3

我正在尝试实现一种检测重复文件的方法。我有一个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);

它仍然有效还是会失去独特性?

c# .net hash md5
3个回答
2
投票

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

  • 加:你不会失去任何独特性
  • 加上:Guid是一个值类型的事实意味着你避免分配相比string ...
  • 减去:...但是如果你要在任何地方显示它,你实际上最终可能会分配多个字符串(即多次渲染相同的Guid
  • 减:Guid有一个语义含义,在这里不会真正得到尊重/期待
  • 减:Guid默认格式与通常表达MD5哈希的方式不同
  • 减去:Guid endianness是一个混乱,所以如果你想在原始字节和任何文本表示之间得到:非常小心;这不是你所期望的

0
投票

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

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


-1
投票

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

做这个实验:为两者使用相同的字节数组创建两个Guids。你认为Guids是不同的还是相同的?

© www.soinside.com 2019 - 2024. All rights reserved.