Eine Hash-Funktion (z.B. MD5) bildet einen beliebig(!) langen Text auf eine fest vorgegebene Textlänge ab, z.B. auf 128bit = 16 Bytes.
Bei relativ kurzen Kennwörtern ist es noch nicht offensichtlich, aber wenn ich einen Hash über längere Texte bilde, wird eigentlich klar, dass es keine eindeutige Rückabbildung geben kann. Wenn 32 kByte Text auf 16 Bytes komprimiert werden, werde ich die ursprünglichen 32 kByte nie daraus rekonstruieren können. In der Mathematik nennt man dies eine injektive Abbildung.
Der Trick bei guten Hash-Funktionen ist es jetzt, dass man nur sehr schwer einen ähnlichen Text bilden kann, der auf genau den gleichen Hashwert kommt wie der ursprüngliche Text. Beispiel: Ich habe einen Vertrag, da steht ein Kaufpreis von 30.000 EUR. Von diesem Vertrag wurde ein Hashwert gebildet, um erkennen zu können, wenn jemand den Text ändert. Wenn ich jetzt aus den 30.000 EUR 10.000 EUR machen will (1 Bit geändert), kommt ein völlig neuer Hashwert heraus und es ist nahezu unmöglich, den Vertragstext soweit abzuändern (z.B. durch zusätzliche Leerzeichen etc.), dass ich wieder auf den ursprünglichen Hashwert komme.
Beim Abspeichern von Kennwörter in Datenbanken wird dieses Verfahren auch gerne verwendet, gerade auch um zu verhindern, dass man aus der Datenbank die Kennwörter ablesen kann.
Vielleicht hilft dieser kleine Ausflug, um das Problem zu verstehen
Gruß,
Michael