Hash 多对一映射哈希函数

Hash 多对一映射哈希函数,hash,one-to-many,many-to-one,hash-function,Hash,One To Many,Many To One,Hash Function,我不知道实际的数学术语(我使用的术语是多对一映射) 这是我的要求: hash_code = hash_function(element 1, element 2, ...... element n) 我应该可以找回 bool b = is_valid_hash(hash_code, element x) 函数是有效的\u hash应该能够告诉我“元素x”是否是在hash\u函数中传递的元素 这种散列函数的名称是什么?一个散列应该能够映射到多个元素(而不是冲突)。假设散列函数是一个标准的散列算

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

这是我的要求:

hash_code = hash_function(element 1, element 2, ...... element n)
我应该可以找回

bool b = is_valid_hash(hash_code, element x)
函数
是有效的\u hash
应该能够告诉我“
元素x
”是否是在
hash\u函数中传递的元素


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

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

  • hash_function()可以对每个元素进行散列,然后连接字符串(这将产生一个很长的散列,并且在某些方面不太安全,但它可以工作),然后可以对is_valid_hash()进行子字符串比较(查看散列元素x是否是hash_代码的子字符串)

  • 类似地,hash_函数可以返回一个散列数组……如果需要字符串或担心安全性,还可以返回一个双向加密的序列化数组……然后可以在is_valid_hash()中对其进行解密和取消序列化,并且可以检查数组中是否存在元素x散列


  • 我想问的是:

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