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);
}
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);
}
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.
Leggi altre domande sui tag cryptography hash