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