MurmurHash2 es una función hash de propósito general simple y rápida desarrollada por Austin Appleby. No criptográficamente seguro , devuelve un número sin firmar de 32 bits .
Entre las ventajas de la función, los autores destacaron la simplicidad, la buena distribución, el poderoso efecto de avalancha , la alta velocidad y la resistencia relativamente alta a las colisiones . Las versiones actuales del algoritmo están optimizadas para procesadores compatibles con Intel.
La segunda versión de la función hash tiene algunas desventajas. En particular, este es el problema de las colisiones en cuerdas pequeñas. La versión corregida tiene una estructura tipo Merkle-Damgard , corre un poco más lento (alrededor del 20%), pero muestra mejores estadísticas.
#define mmix(h,k) { k *= m; k ^= k >> r; k*=m; h*= metro; h ^ = k; } unsigned int MurmurHash2A ( const void * key , int len , int seed sin firmar ) { const int sin signo m = 0x5bd1e995 ; const int r = 24 ; int sin signo l = len ; const caracter sin signo * data = ( const caracter sin signo * ) clave ; int sin signo h = semilla ; sin firmar int k ; mientras ( largo >= 4 ) { k = * ( int sin signo * ) datos ; mmix ( h , k ); datos += 4 ; largo -= 4 ; } int sin signo t = 0 ; cambiar ( len ) { caso 3 : t ^= datos [ 2 ] << 16 ; caso 2 : t ^= datos [ 1 ] << 8 ; caso 1 : t ^= datos [ 0 ]; }; mmix ( h , t ); mmix ( h , l ); h ^ = h >> 13 ; h *= metro ; h ^ = h >> 15 ; devuelve h ; }Funciones hash | |
---|---|
propósito general | |
Criptográfico | |
Funciones de generación de claves | |
Número de cheque ( comparación ) | |
Hachís |
|