如何创建类似输入的哈希?

时间:2011-11-26 22:14:00

标签: string algorithm file hash comparison

我想创建一个包含文件的数据库。而且,为了轻松搜索这些文件,我想使用某种散列技术。但是,我不仅希望找到完全相同的文件,还要检查文件的某些部分是否相同(即文件类似)。换句话说,类似的文件应该有类似的哈希值。

这意味着这种散列实际上不是加密散列,因为不应该存在“雪崩效应”(雪崩效应意味着每个数据位都会影响其他数据的所有其他位。)

另一件事是哈希不需要是单向的,因为它不用于安全目的,而是用于比较文件。

所以从本质上讲,我正在寻找一种算法,可以为每个唯一的输入创建一个唯一的哈希:

  • (几乎)没有碰撞

  • 为类似输入创建类似的输出

  • 比原始文件短(否则简单地比较原始文件会更快)。

我在考虑将前两个字符加在一起,然后将第3个和第4个字符加在一起等等。但是,由于“1 + 4”与“2 + 2”相同,因此发生了大量的碰撞等等

我真的不知道如何开始。有人可以赐教我吗? :)

2 个答案:

答案 0 :(得分:3)

这通常被称为near duplicate detection问题,并不容易解决;我建议使用simhash算法(代码为here)。

答案 1 :(得分:1)

我目前正在使用ssdeep来达到同样的效果,而且我的效果相当不错。

我还读到sdhash比ssdeep好。