2017-02-04 5 views
1

Ich weiß, wie man den Wert zu erhalten, der eine Zeichenfolge durch Horner-Methode weicht Hashing dauert drei paramettres String str , int p (prime) and int m wie dieseHorner-Methode von Hashing

p(str)=(sumOf(str(0)+str(1)*M+....+str(n)*M^n))%p = hashVal 

aber das Problem ist, wie man die String str bekommt nur, indem sie hashVal, p und M zum Beispiel, wenn ich dir geben hashval=7, p = 11 und M = 2 müssen Sie mir eine Zeichenfolge zum Beispiel "Hallo" (nicht richtig, nur ein Vorschlag für das Verständnis) Ich meine, dass ich nicht weiß, wie zu tun ist die inverse und danke für Ihre Hilfe

+0

Ist nicht der Punkt der Hashing, dass die Umkehrung hart ist, wenn nicht unmöglich, einzigartig zu finden? – Samizdis

+0

ich konw diese, aber ich möchte nur eine, wenn es möglich ist – user6347533

+0

können Sie mir erklären, wie Sie das tun und danke – user6347533

Antwort

0

Sie können keine eindeutige Eingabe von dem Hash erhalten, den Sie beschreiben, da die Modulo-Operation Informationen wegwirft. Wenn Sie wüssten, dass der Hashwert 7, M = 2 und p = 11 ist, wie in Ihrem Beispiel, würden Sie nicht wissen, ob der Wert von sumOf (...) 7 oder 18 oder so war.

Selbst wenn Sie das getan haben, sagen Sie, dass es 5 war, könnten Sie für eine Beispiel 2-Zeichen-Zeichenfolge nicht herausfinden, ob str (0) 1 war und str (1) 2 war. oder str (0) war 5 und str (1) war 0.

Hashes sind in der Regel schwer/unmöglich umzukehren, besonders einzigartig. Der einfachste Weg, sie zu lösen, besteht darin, alle möglichen Eingaben zu überprüfen und ihre Ausgaben zu überprüfen. Sie erhalten am Ende viele Eingaben mit demselben HashVal (wenn p in Ihrem Beispiel 3 ist, gibt es nur 3 verschiedene Hashes).

+0

können Sie weitere Informationen über das, was ich hier gefragt https://a2oj.com/p?ID erhalten = 429 mit freundlichen Grüßen – user6347533