Jenkins hash funktion

Den aktuelle version af siden er endnu ikke blevet gennemgået af erfarne bidragydere og kan afvige væsentligt fra den version , der blev gennemgået den 6. februar 2019; checks kræver 3 redigeringer .
Jenkins hash-funktioner
Først udgivet 1997
Type hash funktion

Jenkins hash-funktioner er en familie af generelle hash-funktioner til nøgler med variabel længde udviklet af Bob Jenkins. Funktionerne kan også bruges som en kontrolsum til at opdage utilsigtet datakorruption eller til at opdage identiske poster i en database . Beskrivelsen af ​​funktionen blev først offentliggjort i 1997.

Hash-funktioner

en ad gangen

Ovenstående funktionstekst er taget fra Bob Jenkins' webside og er en udvidet version udgivet af forfatteren i Dr. Dobbs' Journal.

uint32_t jenkins_one_at_a_time_hash ( usigneret tegn * nøgle , size_t len ​​​​) { uint32_t hash , i ; for ( hash = i = 0 ; i < len ; ++ i ) { hash += - tast [ i ]; hash += ( hash << 10 ); hash ^= ( hash >> 6 ); } hash += ( hash << 3 ); hash ^= ( hash >> 11 ); hash += ( hash << 15 ); returner hash ; }

Figuren til højre viser lavineeffekten af ​​funktionen.

Hver af de 24 rækker svarer til en bit i 3-byte nøglen i input, og hver af de 32 kolonner svarer til en bit i output hash. Farverne angiver, hvor godt en inputbit påvirker en given outputbit: en grøn firkant indikerer god blanding, en gul firkant indikerer lidt blanding, og rød indikerer ingen blanding. Som det kan ses af figuren, er kun nogle få bits i den sidste byte af inputtasten løst blandet med nogle få bits af resultatet.

opslag2

Lookup2 -funktionen var en mellemversion af en-ad-gangen-funktionen.

opslag3

Opslag3 - funktionen opdeler inputtet i blokke på 12 bytes hver (96 bit). [1] Denne adfærd kan være mere passende, når hastighed er vigtigere end enkelhed. Husk på, at ydelsesgevinsten med denne hash-variant sandsynligvis kun er for store nøgler, og at den øgede kompleksitet af implementeringen tværtimod kan få ydeevnen til at blive langsommere. For eksempel på grund af det faktum, at compileren muligvis ikke er i stand til at erstatte funktionen inline.

Links

  1. Bob Jenkins, lookup3.c kildekode . Pr. 16. april 2009.