Jenkins hashfunktion

Den aktuella versionen av sidan har ännu inte granskats av erfarna bidragsgivare och kan skilja sig väsentligt från versionen som granskades den 6 februari 2019; kontroller kräver 3 redigeringar .
Jenkins hashfunktioner
Först publicerad 1997
Sorts hash-funktion

Jenkins hashfunktioner är en familj av hashfunktioner för allmänna ändamål för nycklar med variabel längd utvecklad av Bob Jenkins. Funktionerna kan också användas som en kontrollsumma för att upptäcka oavsiktlig datakorruption eller för att upptäcka identiska poster i en databas . Beskrivningen av funktionen publicerades första gången 1997.

Hash-funktioner

en i taget

Ovanstående funktionstext är hämtad från Bob Jenkins webbsida och är en utökad version publicerad av författaren i Dr. Dobbs' Journal.

uint32_t jenkins_one_at_a_time_hash ( osignerat tecken * nyckel , size_t len ​​​​) { uint32_t hash , i ; för ( hash = i = 0 ; i < len ; ++ i ) { hash += nyckel [ i ]; hash += ( hash << 10 ); hash ^= ( hash >> 6 ); } hash += ( hash << 3 ); hash ^= ( hash >> 11 ); hash += ( hash << 15 ); returnera hash ; }

Bilden till höger visar lavineffekten av funktionen.

Var och en av de 24 raderna motsvarar en bit i 3-byte-nyckeln i ingången, och var och en av de 32 kolumnerna motsvarar en bit i utdata-hash. Färgerna indikerar hur väl en ingångsbit påverkar en given utmatningsbit: en grön fyrkant indikerar bra blandning, en gul fyrkant indikerar liten blandning, och röd skulle indikera ingen blandning. Som framgår av figuren är endast några få bitar i den sista byten av inmatningsnyckeln löst blandade med några få bitar av resultatet.

lookup2

Lookup2 -funktionen var en mellanversion av en-i-gång-funktionen.

lookup3

Lookup3 - funktionen delar upp inmatningen i block om 12 byte vardera (96 bitar). [1] Detta beteende kan vara mer lämpligt när hastighet är viktigare än enkelhet. Tänk på att prestandavinsten med denna hashvariant sannolikt bara är för stora nycklar, och att den ökade komplexiteten i implementeringen tvärtom kan göra att prestandan saktar ner. Till exempel på grund av att kompilatorn kanske inte kan ersätta funktionen inline.

Länkar

  1. Bob Jenkins, lookup3.c källkod . Från och med den 16 april 2009.