un esempio vale 1000 parole:

codice:
password = "html"
MD5(html) = fc35fdc70d5fc69d269883a822c7a53e
l'utente all'atto della login inserisce la password "html" e il sistema confronta se md5("html") corrisponde all'hash della password salvato in database.

html è una parola "comune" e probabilmente sarà in qualche database di hash

Con il salt
codice:
password = "html"
salt = "a!jKl7&@#è1"
MD5("htmla!jKl7&@#è1") = 35a063eb88fcb3b718e54f11c1c9c993
l'utente inserisce comunque la password "html" e non gli serve sapere il salt: il sistema di login verifica se MD5(pass+salt) corrisponde all'hash in database. Se un curioso trovasse quell'hash da qualche parte, utilizzando uno dei vocabolari hash-parola in chiaro non potrebbe risalire ad html.

Le dolenti note a cui accennava andbin: md5 produce 2^32 hash diversi. Tanti, ma pur sempre finiti. Le possibili parole, frasi - sequenze di byte in genere sono potenzialmente infinite, quindi infinite sequenze di byte hanno... lo stesso hash!! Ecco che per esempio l'inferno di dante per intero potrebbe, magari, avere lo stesso hash di "ciao"... la cosa è risaputa ed accettata salvo specifiche esigenze di sicurezza.