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.
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 -funktio oli yksi kerrallaan- funktion väliversio .
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ä.
Hash-funktiot | |
---|---|
yleinen tarkoitus | |
Kryptografinen | |
Avainten luontitoiminnot | |
Tarkista numero ( vertailu ) | |
Hashes |
|