c# - 从 MD5 散列而不是字符串创建 Guid 是否有效?

标签 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);

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

最佳答案

MD5 哈希值和 Guid本质上两者都表示 128 位二进制,所以:

  • 加:你不会失去任何独特性
  • 加:事实Guid是值类型意味着与 string 相比,您可以避免分配...
  • 减号:...但如果你要在任何地方显示它,你实际上可能最终分配多个字符串(即多次渲染相同的 Guid)
  • 减号:Guid有语义在这里不会真正受到尊重/预期
  • 减号:Guid默认格式与通常表示 MD5 哈希的方式不同
  • 减号:Guid字节序是一团糟,所以如果你想在原始字节和任何文本表示之间获得:tread 非常小心;它是 不是 您的期望
  • 关于c# - 从 MD5 散列而不是字符串创建 Guid 是否有效?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55533117/

    相关文章:

    ruby - 如何将哈希数组排序为具有多个键值的哈希?

    c++ - 在 C++ 中使用 unordered_set 作为 unordered_map 的键时出现的问题

    python - 使用 Python 和哈希表查找链表末尾的第 n 个节点

    c# - 使用 AddRange() 时如何增加 List<T> 的内部数组

    c# - 使用 Linq 解析 XML 时,只会获取一个对象

    c# - 使用方法但没有字段或属性的类实例化有多快?

    c# - .NET Winform 设置文件位置

    c# - NET 中是否可以在使用 ContextBoundObject 调用的方法中获取调用者的对象引用(实例而不是类)

    C# 调整文本框大小以适应内容

    c# - 字符串和整数,隐式和显式