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.
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 -funktionen var en mellanversion av en-i-gång-funktionen.
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.
Hash-funktioner | |
---|---|
generell mening | |
Kryptografisk | |
Nyckelgenereringsfunktioner | |
Kontrollnummer ( jämförelse ) | |
Hashes |
|