Ecco un semplice esempio:
Un hash della stringa "Hello world!" è "Hel". Se ti viene dato "Hel", non puoi ricreare "Hello world!", Eppure probabilmente non si scontrerà con molte altre stringhe.
Certo, questo hash non è molto buono perché se si tratta di una password, conoscendo le prime tre lettere è molto più semplice forzare la password originale.
Quindi cosa succede se moltiplichiamo ogni valore di lettera di 3 mod 26?
H (7) * 3 -> V (21)
e (4) * 3 -> m (12)
l (11) * 3 -> f (5)
Ora il nostro hash è "Vmf". Certo, si potrebbe invertire questo, ma senza sapere che è stato moltiplicato per 3, questo diventa già un po 'più complicato. Per un computer questo è banale, ma immagina di moltiplicare contro enormi numeri primi. Renderebbe praticamente impossibile la ricerca di un pattern e dovresti dedicare lunghe ore di calcolo per calcolare i possibili valori e provarli.
La conversione in "Vmf" era una questione banale, ma il ripristino a "Hel" non lo è. Questo è esattamente ciò che vogliamo da un hash.
Se l'utente fornisce la stringa "Hello, World!", senza dover salvare la stringa originale, possiamo semplicemente applicare l'hash a "Hello, World!" e ottieni "Vmf" e poi confronta quella stringa con quella che abbiamo sul file ..
"Vmf" === "Vmf" // Bingo!
E in poche parole, questo è l'hashing. Esistono varie tecniche, ma il concetto è in definitiva lo stesso. Deterministicamente crea una stringa di dati irreversibile da un input.