将文件路径(URI)转换为System.Guid的好方法是什么?我想尽量减少碰撞的可能性,但我对一个相当独特的散列感到满意(数据库中可能永远不会超过几十/百个项目)
答案 0 :(得分:8)
没有必要。使用md5或sha1的哈希URI,这就是全部。 GUID不适用于散列事物。它们意味着独立于其他一切而独特创造。
答案 1 :(得分:8)
“正确”方式(根据RFC 4122§4.3)是创建基于名称的UUID。这样做(仅使用MD5哈希)的优点是保证不会与非基于命名的UUID冲突,并且与其他基于名称的UUID碰撞的可能性非常小(非常小)。
.NET Framework中没有用于创建这些的本机支持,但是通过使用代码similar to this,您可以按如下方式创建GUID:
Guid guid = GuidUtility.Create(GuidUtility.UrlNamespace, filePath);
为了进一步降低与其他GUID冲突的风险,您可以创建一个私有GUID作为命名空间ID(而不是使用RFC中定义的URL命名空间ID)。
答案 2 :(得分:3)
如果您可以选择集中注册表/数据库,则可以维护GUID< - > URL解析程序并为您需要的每个URL生成新的GUID。这将按照预期的方式使用GUID,从而最大限度地减少与本机生成的GUID发生冲突的可能性。