es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Funciones hash no criptográficas que son homomórficas con respecto a la concatenación.

Adler32 y CRC tienen la propiedad de que f(a || b) puede calcularse de manera económica a partir de f(a), f(b) y len(b). ¿Existen otras funciones de hash no criptográficas comunes con esta propiedad?

El contexto (para evitar un problema XY) es que estoy eliminando duplicados en cadenas dividiéndolas en fragmentos, que se indexan por su hash. Entonces, una cadena de entrada puede representarse como una secuencia de fragmentos concatenados. Me gustaría usar una función de hash para que todas las representaciones de una cadena tengan el mismo hash, que se pueda calcular directamente a partir de los hashes de los fragmentos sin necesidad de los datos subyacentes, ya que se están transmitiendo en orden no especificado y, por lo tanto, puede no estar disponible en el mismo lugar en un momento dado.

Mi diseño requiere aproximadamente 2^32 fragmentos. Las colisiones son muy costosas, pero no afectarían la corrección. Basándome en eso, creo que CRC64 funcionaría, pero me pregunto cuáles son mis alternativas. No me importaría tener un hash de 128 bits para una prueba de futuro (es decir: el tamaño del conjunto de datos puede crecer).

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Existen varias funciones de hash no criptográficas comunes que tienen la propiedad de calcular f(a || b) de manera económica a partir de f(a), f(b) y len(b). Ejemplos incluyen FNV-1a, MurmurHash y xxHash. Todos estos tienen buenas propiedades de resistencia a colisiones y se pueden utilizar para fines de deduplicación. Para un hash de 128 bits, se puede utilizar xxHash3, que es una variante reciente de xxHash que admite valores de hash más largos.

Comments are closed.