Xxhash: ventana rodante xxhash

Creado en 19 abr. 2019  ·  6Comentarios  ·  Fuente: Cyan4973/xxHash

Hola,

¿Xxhash admite el hash basado en ventanas móviles? Por ejemplo, supongamos que usamos una ventana móvil de tamaño fijo de 48 bytes. Primero calculamos un xxhash para los primeros 48 bytes (0-47 bytes). Entonces, ¿es posible calcular la siguiente ventana móvil a partir del desplazamiento de 1-48, restando el impacto del byte 0 y sumando el byte 48, sin calcular un xxhash desde cero?

question

Todos 6 comentarios

No, xxhash no es un hash rodante.
Esto requeriría consumir byte tras byte de entrada y preservar la linealidad matemática perfecta, mientras que xxhash ingiere datos por franjas completas y rompe la linealidad a propósito para mejorar la distribución de bits.

¡Gracias por tu explicación! Supongo que tengo que buscar otros hashes rodantes.

@ Cyan4973 Al estar también en busca de una función hash de rotación muy rápida, aquí hay una pregunta de seguimiento:

¿Sería posible que describiera brevemente, o enlazara, técnicas que hacen que xxHash sea rápido y bien distribuido, que aún podría aplicarse a los hashes rodantes?

Sería fantástico poder crear un hash rodante, por ejemplo, para rsync o deduplicación de datos en memoria ala bup , que se ejecuta cerca del rendimiento de xxHash.

Los hash de laminación que conozco son fundamentalmente diferentes de xxhash, o cualquier otro hash de alta calidad.
En mi humilde opinión, estas 2 categorías no se superponen.

Estás pensando en algo demasiado limitado, @ Cyan4973.

XXH3 definitivamente es capaz de ser un hash rodante. Simplemente no en el sentido tradicional.

Cada 1024 bytes alineados (un bloque, dado el tamaño de secreto predeterminado) se puede presionar o abrir. Esto requiere los 8 acumuladores, pero definitivamente es factible.

Bien, eso es cierto.
Es solo que todos los hashes rodantes que conozco tienen granularidad a nivel de bytes, y las aplicaciones que los usan tienden a necesitar este nivel de granularidad (encontrar puntos de corte flexibles en un documento más grande es bastante común).

Una granularidad a nivel de KB parece realmente posible con XXH3,
aunque requeriría una aplicación capaz de aprovechar este nivel de granularidad.

Además, no es tan sencillo como un hash rodante normal,
donde RH(p, p+N) = H(RH(p-1, p+N-1), p+N) - h(p-1) .
Para XXH3, dado que no hay linealidad, aún es necesario recombinar y mezclar todos los fragmentos de 1 KB digeridos en el orden correcto.
Eso es aún menos trabajo que reprocesar toda la entrada, pero la carga de trabajo aumenta linealmente con el tamaño del segmento a procesar.

¿Fue útil esta página
0 / 5 - 0 calificaciones

Temas relacionados

t-mat picture t-mat  ·  3Comentarios

boazsegev picture boazsegev  ·  6Comentarios

carstenskyboxlabs picture carstenskyboxlabs  ·  6Comentarios

eloff picture eloff  ·  6Comentarios

shuffle2 picture shuffle2  ·  6Comentarios