如何在不同的实例中也获得相同的哈希值

时间:2019-04-11 16:57:37

标签: c# .net-core

我通过创建和使用哈希值来设置数据库条目的ID。 问题是,当我再次启动该应用程序时,相同原始值的哈希值不同,并且我得到了一倍的值(相同的值,不同的ID)。 在下面找到我的示例代码。启动CLI,记住给定的哈希值,然后重新开始->不同的值。

如何在每个实例中重现相同的哈希值?

static void Main(string[] args)
{
    int drid = 3081;
    DateTime dt = DateTime.ParseExact("2019-04-11 00:23:10", "yyyy-MM-dd HH:mm:ss", null);
    string idAsString = drid.ToString() + dt.ToString();
    Console.WriteLine(idAsString.GetHashCode().ToString());
    Console.ReadKey();
}

1 个答案:

答案 0 :(得分:0)

请勿执行此操作。永远不会。哈希码并不是唯一的,并且在语义上不同的对象有时会导致冲突-即,两者将产生完全相同的哈希码,从而破坏数据库。

接下来要注意的是,哈希对象很复杂。最好使哈希码与对象的生存时间保持一致,这意味着您只需在对象创建后对其进行一次计算即可-或即时忽略可变字段(因为通常每个突变都对其进行计算)将更改哈希码。

甚至还不止于此:提出足够好的哈希算法并不容易:哈希算法不可预测,而且冲突少。