2011-11-26 19 views
6

Quiero crear una base de datos con archivos. Y, para buscar fácilmente estos archivos, quiero usar algún tipo de técnica de hash. Sin embargo, no solo quiero buscar archivos que sean EXACTAMENTE iguales, sino también verificar si partes de los archivos son iguales (es decir, los archivos son similares). en otras palabras, archivos similares deben tener hashes similares.¿Cómo crear un hash que sea similar para entradas similares?

Esto significa que este tipo de hachís no es realmente un hash criptográfica porque no debería ser un 'efecto avalancha' (efecto de avalancha significa que cada bit de datos afecta a todos los demás bits de otros datos.)

Otro Lo que pasa es que el hash no necesita ser unidireccional, ya que no se usa para fines de seguridad, sino para la comparación de archivos.

Así que en esencia, estoy en busca de un algoritmo que puede crear un hash único para cada entrada única que:

  • tiene (casi) ninguna colisión

  • crea una salida similar para entradas similares

  • Es más corto que el archivo original (de lo contrario, sería más rápido simplemente comparar los archivos originales en su lugar).

Estaba pensando en algo así como la adición de los dos primeros caracteres juntos, a continuación, añadir los días 3 y 4 ª juntos, etc. Sin embargo, esto tiene una enorme cantidad de colisión ya que "1 + 4" es lo mismo que " 2 + 2 ", etc

Realmente no tengo ni idea de cómo empezar. ¿Podría alguien iluminarme por favor? :)

+1

Esto es probablemente muy difícil. Mira en http://en.wikipedia.org/wiki/Agrep –

+2

si el trabajo es encontrar archivos con bytes comunes, [ssdeep] (http://ssdeep.sourceforge.net/), es genial en eso. –

+0

Estarías buscando crear un algoritmo de compresión, seguido de un ordenamiento. Deberías usar las mismas tablas de frecuencia para todas las entradas comprimidas para que las cosas sean deterministas. – sehe

Respuesta

1

Actualmente estoy usando ssdeep para lograr el mismo efecto y estoy obteniendo muy buenos resultados con él.

También he leído que sdhash es mejor que ssdeep.

Cuestiones relacionadas