Si tratta di una buona funzione di 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); 
}
    
posta Uday Ayyagari 13.10.2015 - 03:17
fonte

1 risposta

4

No, non lo è.

Se si sta tentando di impedire la manomissione, un hash a 31 bit è troppo corto, ignorando anche eventuali carenze di una funzione specifica. Se stai cercando di catturare la corruzione dei dati, un hash standard come CRC-32 è quasi altrettanto veloce ed è progettato per lo scopo.

    
risposta data 13.10.2015 - 07:08
fonte

Leggi altre domande sui tag