我正在尝试实现一种检测重复文件的方法。我有一个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);
它仍然有效还是会失去独特性?
MD5哈希和Guid
基本上都表示128位二进制,所以:
Guid
是一个值类型的事实意味着你避免分配相比string
...Guid
)Guid
有一个语义含义,在这里不会真正得到尊重/期待Guid
默认格式与通常表达MD5哈希的方式不同Guid
endianness是一个混乱,所以如果你想在原始字节和任何文本表示之间得到:非常小心;这不是你所期望的不确定它是否是最好的主意,但由于两个值均为128位,因此假设您没有尝试转换MD5的文本表示,则不会丢失任何数据。
只需将MD5字节直接转换为GUID,而不必先将其转换为string
。
Guids只有通过调用Guid.NewGuid()
正确生成才能保证唯一性。通过从MD5字节构造Guids,您将获得零唯一性。您只将字节存储在名为“全局唯一标识符”的数据结构中,该结构可能不是唯一的。
做这个实验:为两者使用相同的字节数组创建两个Guids。你认为Guids是不同的还是相同的?