PJW hash-functie - PJW hash function

De PJW-hashfunctie is een niet-cryptografische hashfunctie die is gemaakt door Peter J. Weinberger van AT&T Bell Labs.

Andere versies

Een variant van PJW-hash is gebruikt om ElfHash- of Elf64-hash te maken die wordt gebruikt in Unix-objectbestanden met ELF- indeling.

Allen Holub heeft een draagbare versie van het PJW-hash-algoritme gemaakt dat een bug bevatte en in verschillende leerboeken terechtkwam, zoals de auteur van een van deze leerboeken later toegaf.

Algoritme

PJW-hash-algoritme omvat het verschuiven van de vorige hash en het toevoegen van de huidige byte, gevolgd door het verplaatsen van de hoge bits:

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

Implementatie

Hieronder vindt u de algoritme-implementatie die wordt gebruikt in het Unix ELF-formaat:

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;
}

Zie ook

Niet-cryptografische hash-functies

Referenties