将多个值组合到与订单无关的哈希中

时间:2017-10-11 16:12:20

标签: c# hash

为了识别数据库中的对象并使查找更容易,我决定散列标识对象的值并将它们存储在我们的数据库中。

这些值可以是字符串,guids,小数,布尔值或日期时间。例如,我们可以

object 1: "test 1", 1, Guid.NewGuid() -> combined hash of these values = 1
object 2: "test 2", 2, DateTime.Now -> combined hash of these values = 2

在这种情况下,object 1object 2不同,因为它们的哈希值不同。

在我的第一次尝试中,我使用值的HashCode并以与顺序无关的方式组合它们(请参阅here)。但是我很快就遇到了很多问题:

  1. 我遇到了顺序guid的冲突
  2. 哈希在app域中可能不是唯一的
  3. 我在考虑使用SHA256来生成哈希码,但是如何以与顺序无关的方式将它们组合在一起呢?

    基本上我对散列函数H的要求是

    1. 可交换:H(1, "test") = H("test", 1)
    2. Injective:所以元组的散列不应该等于另一个元组的散列,除非元组本身相等(即元组组件相等)
    3. 不需要加密安全哈希
    4. 不需要使流程可逆
    5. 我可以用它做什么?

0 个答案:

没有答案