Funcții hash Jenkins | |
---|---|
Prima publicat | 1997 |
Tip de | funcția hash |
Funcțiile hash Jenkins sunt o familie de funcții hash de uz general pentru chei cu lungime variabilă dezvoltate de Bob Jenkins. Funcțiile pot fi utilizate și ca sumă de control pentru a detecta coruperea accidentală a datelor sau pentru a detecta înregistrări identice într- o bază de date . Descrierea funcției a fost publicată pentru prima dată în 1997.
Textul funcției de mai sus este preluat de pe pagina web a lui Bob Jenkins și este o versiune extinsă publicată de autor în Jurnalul Dr. Dobbs.
uint32_t jenkins_one_at_a_time_hash ( unsigned char * key , size_t len ) { uint32_t hash , i ; pentru ( hash = i = 0 ; i < len ; ++ i ) { hash += tasta [ i ]; hash += ( hash << 10 ); hash ^= ( hash >> 6 ); } hash += ( hash << 3 ); hash ^= ( hash >> 11 ); hash += ( hash << 15 ); returnează hash ; }Figura din dreapta arată efectul de avalanșă al funcției.
Fiecare dintre cele 24 de rânduri corespunde unui bit din cheia de 3 octeți din intrare, iar fiecare dintre cele 32 de coloane corespunde unui bit din hash-ul de ieșire. Culorile indică cât de bine un bit de intrare afectează un bit de ieșire dat: un pătrat verde indică o amestecare bună, un pătrat galben indică o amestecare redusă, iar roșu ar indica lipsa amestecării. După cum se poate vedea din figură, doar câțiva biți din ultimul octet al tastei de intrare sunt amestecați lejer cu câțiva biți din rezultat.
Funcția lookup2 a fost o versiune intermediară a funcției unu-la-o dată.
Funcția lookup3 împarte intrarea în blocuri de 12 octeți fiecare (96 de biți). [1] Acest comportament poate fi mai potrivit atunci când viteza este mai importantă decât simplitatea. Rețineți că câștigul de performanță cu această variantă hash este probabil doar pentru chei mari și că, dimpotrivă, complexitatea crescută a implementării poate duce la încetinirea performanței. De exemplu, din cauza faptului că compilatorul nu poate înlocui funcția inline.
Funcții hash | |
---|---|
scop general | |
Criptografic | |
Funcții de generare a cheilor | |
Numărul de verificare ( comparație ) | |
Hashes |
|