¿Es esta una buena función hash?

0
unsigned int hash(bytearray[] msg) { 
  unsigned int hash = 0xDECAFEBAD; 
  for(i = 0; i < msg.length(); i++) { 
    hash = ((hash << 4) XOR (hash >> 28)) XOR msg[i]; 
  }
  return (hash BITWISE-AND 0x7FFFFFFF); 
}
    
pregunta Uday Ayyagari 13.10.2015 - 03:17
fuente

1 respuesta

4

No, no lo es.

Si está intentando evitar la manipulación, un hash de 31 bits es demasiado corto, incluso ignorando cualquier defecto de una función específica. Si está tratando de detectar la corrupción de datos, un hash estándar como CRC-32 es casi tan rápido y está diseñado para este propósito.

    
respondido por el Mark 13.10.2015 - 07:08
fuente

Lea otras preguntas en las etiquetas