在我们的应用程序中,我们使用具有Guid值的属性创建Xml文件.该值必须在文件升级之间保持一致.因此,即使文件中的其他内容发生更改,该属性的guid值也应保持不变.
一个显而易见的解决方案是创建一个静态字典,其中包含文件名和用于它们的Guids.然后每当我们生成文件时,我们都会在字典中查找文件名并使用相应的guid.但这不可行,因为我们可能会扩展到100个文件并且不想保留大量的guid.
所以另一种方法是根据文件的路径使Guid相同.由于我们的文件路径和应用程序目录结构是唯一的,因此Guid对于该路径应该是唯一的.因此,每次我们运行升级时,文件都会根据其路径获得相同的guid.我找到了一种很酷的方法来产生这样的' 确定性指导 '(感谢Elton Stoneman).它基本上是这样的:
private Guid GetDeterministicGuid(string input)
{
//use MD5 hash to get a 16-byte hash of the string:
MD5CryptoServiceProvider provider = new MD5CryptoServiceProvider();
byte[] inputBytes = Encoding.Default.GetBytes(input);
byte[] hashBytes = provider.ComputeHash(inputBytes);
//generate a guid from the hash:
Guid hashGuid = new Guid(hashBytes);
return hashGuid;
}
Run Code Online (Sandbox Code Playgroud)
所以给定一个字符串,Guid将始终是相同的.
有没有其他方法或建议的方法来做到这一点?该方法的优点或缺点是什么?
我阅读了有关md5哈希的维基百科文章,但我仍然无法理解哈希如何不能"重构"回到原始文本.
有人可以向对密码学知之甚少的人解释这是如何工作的吗?该功能的哪一部分使其成为单向的?
我们想根据一些随机字符串生成一个 Guid。目标是使给定字符串的 Guid 始终相同。
需要说明的是,我的字符串没有格式化为 guid,它可能是“Toto”,即“asdfblkajsdflknasldknalkvkndlskfj”。
我知道这会生成一些与我的输入字符串一样独特的 Guid,但这不是这里的问题。
我需要一种方法来跨 .NET 框架/环境/执行一致地生成给定对象或对象属性子集的唯一 ID,同时最大限度地减少冲突。
例如,给定一个固定对象,例如
public class ExampleObject
{
public string Prop1 { get; set; }
public string Prop2 { get; set; }
public int Prop3 { get; set; }
public decimal Prop4 { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
我正在考虑将所有值转换为字符串,连接它们,然后使用一些确定性算法来获得所需的结果
// Convert all values to strings and concat
string str1 = "a";
string str2 = "b";
int int1 = 1;
decimal dec1 = 1.2m;
string concatStr …Run Code Online (Sandbox Code Playgroud) .net ×3
c# ×3
guid ×3
hash ×2
md5 ×2
uuid ×2
cryptographic-hash-function ×1
cryptography ×1
hashcode ×1
java ×1