PJW hash functionPJW hash function is a non-cryptographic hash function created by Peter J. Weinberger of AT&T Bell Labs. Other versionsA variant of PJW hash had been used to create ElfHash or Elf64 hash that is used in Unix object files with ELF format. Allen Holub has created a portable version of PJW hash algorithm that had a bug and ended up in several textbooks, as the author of one of these textbooks later admitted.[1] AlgorithmPJW hash algorithm involves shifting the previous hash and adding the current byte followed by moving the high bits:[2] algorithm PJW_hash(s) is uint h := 0 bits := uint size in bits for i := 1 to |S| do h := h << bits/8 + s[i] high := get top bits/8 bits of h from left if high ≠ 0 then h := h xor (high >> bits * 3/4) h := h & ~high return h ImplementationBelow is the algorithm implementation used in Unix ELF format:[3] unsigned long ElfHash(const unsigned char *s)
{
unsigned long h = 0, high;
while (*s)
{
h = (h << 4) + *s++;
if (high = h & 0xF0000000)
h ^= high >> 24;
h &= ~high;
}
return h;
}
This C code incorrectly assumes that See alsoNon-cryptographic hash functions References
|
Portal di Ensiklopedia Dunia