【问题标题】:many to one mapping Hash Function多对一映射哈希函数
【发布时间】:2011-12-28 15:13:00
【问题描述】:

我不知道实际的数学术语(多对一映射是我使用的术语)

这是我的要求:

hash_code = hash_function(element 1, element 2, ...... element n)

我应该可以检索

bool b = is_valid_hash(hash_code, element x)

函数is_valid_hash 应该能够告诉我天气“element x”是hash_function 中传递的一个元素

这种散列函数的名称是什么?一个哈希应该能够映射到多个元素(不是冲突)。

【问题讨论】:

  • 这是个好问题!任何解决方案都可能涉及某种形式的homomorphic encryption,因此如果没有对此的 OOTB 实现,最好将其迁移到 crypto.SE。
  • 您需要一个不可逆且安全的真正哈希函数吗?
  • 我不知道它们是如何被调用的,但我会称它们为“设置枚举哈希函数”。为每个元素取一个素数并将它们相乘(有多少可能的元素?)似乎是合乎逻辑的。 (对每个可能的元素都有一个特殊的私有哈希值称为 Zobrist 哈希,顺便说一句)
  • @Warren:我不需要真正的哈希。散列函数可以映射到 n 个以上的元素(但冲突不应该很高)。单向或双向散列也没有限制。安全不是问题。
  • @Wildpasser:最多可以有 1000 个元素(甚至更多),每个元素大小为 16 个字节。我不明白你乘以素数的想法。我的函数hash_functionis_valid_hash 应该在不同的机器上,所以我无法维护通用哈希表

标签: hash one-to-many many-to-one hash-function


【解决方案1】:

我正在寻找的是:Bloom Filter

【讨论】:

    【解决方案2】:

    假设 hash_function 是标准的散列算法(md5 等),这是无法做到的。但是,如果它是自定义函数,您可以通过以下两种方式之一来实现:

    1. hash_function() 可以散列每个元素,然后连接字符串(这会产生很长的散列,在某些方面会不太安全,但它会起作用),然后你可以做一个 sub -string 比较 is_valid_hash()(查看散列元素 x 是否是 hash_code 的子串。

    2. 1234563在 is_valid_hash() 中,您可以检查元素 x 哈希是否在数组中。

    【讨论】:

    • 他不求实现,只求这个特定字段的name
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多