Jenkinsin hash-funktio

Kokeneet kirjoittajat eivät ole vielä tarkistaneet sivun nykyistä versiota, ja se voi poiketa merkittävästi 6. helmikuuta 2019 tarkistetusta versiosta . tarkastukset vaativat 3 muokkausta .
Jenkinsin hash-funktiot
Ensimmäinen julkaistu 1997
Tyyppi hash-toiminto

Jenkinsin hash-funktiot ovat Bob Jenkinsin kehittämä yleiskäyttöisten hajautusfunktioiden perhe muuttuvapituisille avaimille. Toimintoja voidaan käyttää myös tarkistussummana vahingossa tapahtuneen tietojen korruption havaitsemiseen tai tietokannan identtisten tietueiden havaitsemiseen . Toiminnan kuvaus julkaistiin ensimmäisen kerran vuonna 1997.

Hash-funktiot

yksi kerrallaan

Yllä oleva funktioteksti on otettu Bob Jenkinsin verkkosivulta ja on laajennettu versio, jonka kirjoittaja on julkaissut Dr. Dobbs' Journalissa.

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

Oikeanpuoleisessa kuvassa näkyy funktion lumivyöryvaikutus .

Jokainen 24 rivistä vastaa yhtä bittiä syötteen 3-tavuisessa avaimessa, ja jokainen 32 sarakkeesta vastaa bittiä ulostulon tiivisteessä. Värit osoittavat, kuinka hyvin tulobitti vaikuttaa tiettyyn lähtöbittiin: vihreä neliö tarkoittaa hyvää sekoitusta, keltainen neliö tarkoittaa vähäistä sekoittumista ja punainen tarkoittaa, että sekoittumista ei ole. Kuten kuvasta voidaan nähdä, vain muutama bitti syöttöavaimen viimeisessä tavussa on löyhästi sekoittunut muutaman tuloksen bitin kanssa.

lookup2

Lookup2 -funktio oli yksi kerrallaan- funktion väliversio .

lookup3

Lookup3 -funktio jakaa syötteen 12 tavun lohkoihin (96 bittiä). [1] Tämä käyttäytyminen saattaa olla sopivampi, kun nopeus on tärkeämpää kuin yksinkertaisuus. Muista, että tämän hash-muunnelman suorituskyvyn kasvu on todennäköistä vain suurille avaimille ja että toteutuksen lisääntynyt monimutkaisuus voi päinvastoin hidastaa suorituskykyä. Esimerkiksi siitä syystä, että kääntäjä ei ehkä pysty korvaamaan funktiota rivissä.

Linkit

  1. Bob Jenkins, lookup3.c lähdekoodi . 16. huhtikuuta 2009.