Operațiunea de hashing este transformarea unei serii de caractere într-o valoare sau într-un cod de obicei mai scurt, cu o dimensiune fixă, care reprezintă șirul original. Hashing-ul este folosit pentru a indexa și recupera elemente dintr-o bază de date, pentru că este mai rapid să găsești acele elemente folosind coduri hash mai scurte decât folosind valoarea lor originală. Este de asemenea folosit ca metodă în multe algoritmuri de criptare.
Ca să dăm un exemplu pentru folosirea hashing-ului într-o bază de date, un grup de oameni ar putea să fie aranjat într-o bază de date în felul următor:
Emilia Matei, Alexandra Dobre, Marius Apostol, Eugen Petrache, Daniel Pascu (și multe alte nume sortate în ordine alfabetică)
Fiecare dintre aceste nume ar fi un cod în baza de date pentru datele acelei persoane. Un mecanism de căutare în baza de date ar trebui mai întâi să caute caracter după caracter în tot numele după literele care se potrivesc până îl găsește pe cel căutat (sau până le elimină pe toate celelalte)
Dacă fiecare nume ar fi hash-uit, ar putea să fie posibil (în funcție de numărul de nume din baza de date) să se genereze un cod unic de 4 numere pentru fiecare persoană. De exemplu:
7864 Matei, Emilia
9802 Dobre, Alexandra
1990 Apostol, Marius
8822 Petrache, Eugen
0065 Pascu, Daniel
și așa mai departe
O căutare pentru orice nume ar consta mai întâi din calcularea valorii hash (folosind aceeași funcție de hash cu care au fost stocate elementele) iar apoi compararea cu numele existente folosind aceeași valoare. În general, ar fi mult mai rapid să găsești perechea dacă ai 4 cifre, fiecare cu 10 posibilități, decât de-a lungul unei liste care include cuvinte de dimensiuni imprevizibile, fiecare formate din litere, fiecare literă având 26 de posibilități.
Algoritmul hash este numit hash function (hash în engl=amestecătură)
Pe lângă faptul că datele ar fi găsite mai rapid, hashing-ul este folosit și pentru a cripta și decripta semnături digitale (folosite pentru a autentifica receptorul și emițătorul mesajelor).
Semnătura digitală este transofrmată cu funcția hash iar apoi semnătura și ambele variante hash-ate (cunoscute și ca rezumat al mesajului) sunt trimise în transmisiuni separate către receptor. Folosind aceleași funcții hash ca și emițătorul, receptorul derivă rezumatul mesajului din semnătură și îl compară cu rezumatul mesajului pe care îl primește. (Ambele ar trebui să fie la fel. )
Funcția hash este folosită pentru a indexa valoarea originală sau parola și apoi folosită mai târziu de fiecare dată când sunt căutate datele asociate cu valoarea sau parola.
Astfel, hashing-ul este întotdeauna o operațiune care merge într-un singur sens. Nu este nevoie să faci ”ingineria inversă” a funcției hash analizând valorile hash-ate. De fapt, funcția hash ideală nu poate fi derivată printr-o astfel de analiză. O funcție hash bună ar trebui de asemenea să nu producă aceeași valoare hash din două surse diferite. Dacă acest lucru se întâmplă, se formează ceea ce se numește coliziune. O funcție hash care oferă un risc foarte mic de coliziune este considerată acceptabilă.