Denk dir MD5 einfachheitshalber als mathematische Funktion.
Ein bestimmter Parameter (dein String) ergibt ein Ergebnis (Hashwert).
Es gibt bei dieser Funktion keine Möglichkeit, anhand des Ergebnisses den Parameter festzustellen. Somit bleibt dir nur die Möglichkeit, jeden deiner Meinung nach in Frage kommenden String als Parameter an die MD5-Funktion zu übergeben und das jeweilige Ergebnis mit dem dir bekannten zu vergleichen. Hierbei kann es theoretisch zu einer Kollision kommen, dass also ein anderer Parameter zufällig das gleiche Ergebnis erzeugt. Schließlich ist der Hashwert immer 128 Bit groß, während der Zahlenraum des Parameters theoretisch unendlich ist. Allerdings ist es sehr unwarscheinlich, dass 2 kollidierende Parameter beide aus leserlichen Zeichen bestehen. Eine ausgewählte Prüfmenge an Strings wird in der Praxis allerdings nur aus leserlichen Zeichen bestehen, weil es zu lange dauern würde, den gesamten 128 Bit Raum zu überprüfen.