Jenkins hash függvény

Az oldal jelenlegi verzióját még nem ellenőrizték tapasztalt közreműködők, és jelentősen eltérhet a 2019. február 6-án felülvizsgált verziótól ; az ellenőrzések 3 szerkesztést igényelnek .
Jenkins hash függvények
Először megjelent 1997
Típusú hash függvény

A Jenkins hash függvények Bob Jenkins által kifejlesztett általános célú hash függvények változó hosszúságú kulcsokhoz. A függvények ellenőrző összegként is használhatók a véletlen adatsérülések vagy az adatbázisban lévő azonos rekordok észlelésére . A funkció leírása először 1997-ben jelent meg.

Hash függvények

egy az egyben

A fenti függvényszöveg Bob Jenkins weboldaláról származik, és egy bővített változata, amelyet a szerző a Dr. Dobbs' Journal-ban tett közzé.

uint32_t jenkins_one_at_a_time_hash ( unsigned char * kulcs , size_t len ​​) { uint32_t hash , i ; for ( hash = i = 0 ; i < len ; ++ i ) { hash += kulcs [ i ]; hash += ( hash << 10 ); hash ^= ( hash >> 6 ); } hash += ( hash << 3 ); hash ^= ( hash >> 11 ); hash += ( hash << 15 ); return hash ; }

A jobb oldali ábra a függvény lavina hatását mutatja .

A 24 sor mindegyike egy bitnek felel meg a bemenet 3 bájtos kulcsában, és mind a 32 oszlop egy bitnek a kimeneti hashben. A színek azt jelzik, hogy egy bemeneti bit mennyire befolyásolja az adott kimeneti bitet: a zöld négyzet a jó keverést, a sárga négyzet kis keveredést, a piros pedig azt, hogy nincs keverés. Amint az ábrán látható, a beviteli kulcs utolsó bájtjában csak néhány bit keveredik lazán az eredmény néhány bitjével.

lookup2

A lookup2 függvény az egy az egyben függvény köztes változata volt.

lookup3

A lookup3 függvény a bemenetet egyenként 12 bájtos (96 bites) blokkra bontja. [1] Ez a viselkedés megfelelőbb lehet, ha a sebesség fontosabb, mint az egyszerűség. Ne feledje, hogy ezzel a hash-változattal a teljesítménynövekedés csak nagy kulcsok esetén valószínű, és a megvalósítás megnövekedett összetettsége éppen ellenkezőleg, a teljesítmény lelassulását okozhatja. Például amiatt, hogy a fordító esetleg nem tudja behelyettesíteni a függvényt.

Linkek

  1. Bob Jenkins, lookup3.c forráskód . 2009. április 16-án.