tipos generador funciones funcion explicacion criptográficas algoritmo .net performance hash

.net - generador - El algoritmo hash más rápido para datos de texto



sha 256 (8)

El hash FNV es un conocido algoritmo de hash rápido. No es criptográficamente seguro, pero parece que no necesita un hash seguro.

Estoy tratando de elegir un algoritmo hash para comparar aproximadamente 20 datos de texto diferentes.

¿Qué hash es mejor para estos requisitos?

  • Menos consumo de CPU
  • Tamaño pequeño (<= 32 bytes)
  • La colisión no es un gran problema
  • Se puede generar desde .NET Framework 2 (no debe ser una biblioteca de terceros)

Estoy usando hash para reducir el espacio de memoria y el rendimiento de comparación



Paul Hsieh tiene un SuperFastHash decente, simple, rápido y de 32 bits que funciona mejor que la mayoría de las funciones hash existentes, es más fácil de comprender / implementar y suena como si cumpliera con sus criterios.


Si la colisión no es un gran problema, puede tomar la primera letra de cada documento. O puede usar la longitud del texto o la cadena con el texto.


Una comprobación muy rápida sería tomar la longitud de un texto y XOR con los primeros 4 bytes y usarlo como un hash. Si esto es lo suficientemente bueno, es extremadamente rápido porque es independiente del número de bytes del archivo.


¿Cuánto tiempo debe contener el hash? GetHashCode() es bastante accesible, da una pequeña respuesta (4 bytes), que debería estar bien (minimizando las colisiones) en más de 20 cadenas.

Sin embargo, GetHashCode() no debería persistir en la base de datos; sin embargo, está bien para las comparaciones en memoria. Solo tenga en cuenta que el algoritmo puede cambiar entre marcos (y lo hizo entre 1.1 y 2.0).

La otra ventaja de esto es que es trivial de usar, solo use un Dictionary<string,Something> , que se ocupará de todos los hash, etc. para usted.



Tenía la misma solicitud de myselve y yo implementé xxHashSharp . Solo asegúrese de tomar la biblioteca apropiada (x32 vs x64). También está disponible fuera de c # aquí