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, 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.
Lea otras preguntas en las etiquetas hash cryptography