función hash no criptográfica con salida que cambia tanto como la entrada [cerrada]

2

La forma en que conocemos los hashes (criptográficos) es principalmente que son totalmente diferentes si la entrada se cambia solo por la cantidad mínima.

md5('This is some boring string to test with')    // d546c64928a28b5f605610a919680907
md5('This is another boring string to test with') // a74c1d74da495895bf48056ac979723a

Aquí puedes ver que el hash es totalmente diferente, aunque solo cambié una palabra.

Lo que estoy buscando es una función de hash que devuelve una salida que es igual de similar, ya que las entradas son similares y tan diferentes como las entradas

fn('This is some boring string to test with')     // 00dd2171b47cc2748c2874c42284737
fn('This is another boring string to test with')  // 01ed2371b47cc5748c2874c42284738
fn('The quick brown fox jumps over the lazy dog') // 27bc27999aa2c3c2452cff234feee21

Vea cómo los dos primeros hashes son bastante similares, pero el tercero es completamente diferente.

No quiero un simple mecanismo de comprobación de errores que pueda detectar cambios leves (como CRC). Quiero poder comprobar si dos hashes probablemente tienen un origen similar, al ver que los hashes también son similares.

Mi objetivo es entender si es posible tener hashes de, digamos dos huellas dactilares (reales), y luego basándonos simplemente en los hashes para concluir si las huellas dactilares originales probablemente fueron del mismo dedo.

Hace mucho tiempo, una vez aprendí que tales funciones existen.

¿Puede alguien decirme cómo se denominan estos tipos de hashes y cuáles son algunos ejemplos?

    
pregunta nl-x 03.10.2017 - 17:38
fuente

1 respuesta

0

No estoy seguro si hay hashes existentes que hacen esto. La razón por la cual se desarrollaron los hashes, el requisito de que cualquier cambio en los insumos crearía un gran cambio en el output fue un requisito básico de un hash. Dicho esto, puedo proponer una manera de hacerlo.

Un ejemplo sería un hash que solo cuenta las ocurrencias de cada letra en la entrada. Para simplificar, digamos que este hash solo toma caracteres del alfabeto en minúsculas. Por lo tanto, la longitud del hash será 26. Cada posición en el hash se referirá a un personaje diferente. Así que la primera posición totalizaría toda la a ', la segunda mantendría el total de las b ...

hello world

haría hash a

00011001000300200100000000

porque no hay a, ni b, ni c, 1 d, ect

un cambio a

hello worlds

haría hash a

00011001000300200110000000

La única diferencia sería la cuenta para la "s".

Obviamente hay muchos problemas con esto, ya que solo puedes tener un máximo de 9 instancias de cada letra, pero este es solo un ejemplo para mostrar cómo un hash puede mostrar pequeños cambios en la salida para pequeños cambios en la entrada.

    
respondido por el MikeSchem 03.10.2017 - 18:50
fuente

Lea otras preguntas en las etiquetas