Hallo,
Und das Wesen eines Hashes ist es, diesen nicht zurückrechnen zu können? Damit ist es schon klarer.
Hashen ist nicht Komprimieren. Es ist nicht einmal verlustfreies Komprimieren. Es ist das Abbilden einer unendlichen Menge an Zahlen/String/… auf eine sehr kleine, klar begrenzte Menge.
Nehmen wir einmal:
"Alle meine Entchen schwimmen auf dem See."
wird mit einer fiktiven Hashfunktion abgebildet auf eine Zahl 0-999:
363
Jetzt versuche einmal, von 363 auf den Ausgangssstring zu kommen. Das ist natürlich möglich, aber nicht EINDEUTIG. Es wird unendlich viele Strings geben, die auf 363 abgebildet werden.
Der Hash hat eine feste Länge, während das Original beliebig lang sein kann. Wenn der String länger als das Hash ist, dann ist entweder bloß die Redundanz reduziert worden (d.h. die Daten wurden kompromiert) oder es sind Informationen verloren gegangen. Letzteres ist der Fall.
Wie gesagt, Zurückrechnen ist durchaus möglich, in dem man alle möglichen Strings durchläuft und nach einem Treffer sucht. In Rainbow Tables (vorberechneten Listen mit Eingabewerten und Hashes) kann ich höchstwahrscheinlich nachschlagen, dass der obige Satz eine mögliche Eingabe ist – EINE von potenziell unendlich.
(Ich hoffe, ich stelle das richtig dar – ich bin weder mathematisch, noch informationstechnisch oder kryptographisch geschult.)
Mathias