Dato l'output dell'hash, si può sempre cercare di essere fortunati e iniettare valori casuali fino a quando non viene trovata una corrispondenza. Nel tuo esempio, qualsiasi cracker di password decente dovrebbe provare "helloworld" e "goodbyeworld" molto rapidamente (come, entro il primo secondo di tentativo) perché sono stringhe di password estremamente classiche.
In un caso più generale: data una funzione di hash crittografica h , e i valori h ( m || x ) e h ( m ' || x ) per i valori sconosciuti di m , m ' e x , non è possibile recuperare m , m' o x tranne essendo fortunato nel senso del paragrafo precedente (l'autore dell'attentatore cerca esattamente m || x come input). Ciò vale per la funzione hash crittograficamente sicura, e MD5, nonostante i suoi punti deboli riguardo alle collisioni (che qui sono irrilevanti), è comunque "abbastanza sicuro" per questo.
(Naturalmente, bisogna essere consapevoli del fatto che MD5 non ha "sale", quindi qualsiasi riferimento a MD5-with-a-salt significa davvero "alcune costruzioni custom, fatte in casa, non standard che implicano MD5 e un valore che il designer sceglie di chiamare "un sale". In generale, le costruzioni fatte in casa devono essere evitate.)