基于集合的哈希(摘要)算法?

时间:2013-07-20 00:51:24

标签: algorithm hash set

是否有任何消息摘要算法可以在摘要上应用集合函数,结果仍然有意义?换句话说,是否存在散列函数 NOT 在散列之前和之后打破“set”的概念?

我正在寻找一个哈希函数:

  1. 数据散列为固定长度(或有界长度)字符串
  2. 如果输入数据集相同,则
  3. 生成相同的哈希
  4. 如果选择原始数据的子集,则相当于散列数据子集,或将子集应用于原始数据集的散列,即您将获得相同的子集哈希两种方式。
  5. 例如,在下面的图片集A中有几个数据点(红色dimonds)。 B是A的子集。是否有这样的哈希函数:

      <----> A ----哈希函数中的数据----&gt; _hashA ----设置操作----&gt; _hashB

         

    B中的数据----哈希函数----&gt; _hashB

    enter image description here

3 个答案:

答案 0 :(得分:1)

这看起来有点像http://en.wikipedia.org/wiki/Homomorphic_encryption,有点像数据库隐私方案,如http://en.wikipedia.org/wiki/Differential_privacy - 至少对我而言。

在这两种情况下,开发人员都遇到了问题,因为事实证明,一旦你让用户做了一些事情,他们就能找到聪明的方法来解决如何做任何他们想做的事情,使用这些东西作为构建块,这样系统就没有任何安全性了一点都不。

在你的情况下,我认为你想要AndHash(hash(a),hash(b))= hash(a和b)。这意味着如果hash(a)!= hash(null set),那么我可以根据该集合的哈希值找出a是否是任何集合的成员。如果发生这种情况很多,我可以根据散列值计算散列集的许多成员,这意味着散列值必须与集合一样大,因为它包含其中的所有信息。

根据您的需要,可能值得查看http://en.wikipedia.org/wiki/Minhash

答案 1 :(得分:0)

AFAIK,没有。哈希函数通常(我已经看过很多)对单个数据块进行操作,而不考虑数据实际代表什么,主要关注的是降低碰撞概率。也就是说,当然有可能提出类似你想要做的事情,但我认为这将是非常困难的,并且结果在避免碰撞方面可能不是最理想的。

答案 2 :(得分:0)

简短的回答是否定的,没有这样的算法。您可能尝试加密数据,然后在需要应用set函数时对其进行解密,然后再对其进行加密。然而,散列算法本质上是一种方式,涉及数据丢失。这里对哈希算法和加密算法之间的区别有一个很好的解释:Fundamental difference between Hashing and Encryption algorithms