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.
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.
Lookup2 -funktionen var en mellemversion af en-ad-gangen-funktionen.
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.
Hash funktioner | |
---|---|
generelle formål | |
Kryptografisk | |
Nøglegenereringsfunktioner | |
Tjek nummer ( sammenligning ) | |
Hashes |
|