2010-12-11 4 views
0

i einen String (Name str) haben und i erzeugen aus, dass Hash-Code (Name H), i orginal string (Name str) aus empfangen hashcode (Name H)erhalten Daten von erzeugten Hash-Code()

+2

Bitte mehr Informationen zur Verfügung stellen, aber ich denke, Sie versuchen, einen Einweg-Hash wie ein Zwei-Wege-Hash zu verwenden, was unmöglich ist. –

+3

http://qdb.us/303622 –

+0

@taspeotis: LOL: P – digEmAll

Antwort

6

empfangen wollen Die kurze Antwort ist, dass Sie nicht können.

Das Erstellen eines Hashcodes ist eine Einwegoperation - es gibt keine umgekehrte Operation. Der Grund dafür ist, dass es (für alle praktischen Zwecke) unendlich viele Strings gibt, aber nur endlich viele Hash-Codes (die Anzahl möglicher Hashcodes ist durch den Bereich einer int begrenzt). Jeder Hashcode könnte aus einer der unendlich vielen Zeichenfolgen erzeugt worden sein, die diesen Hash-Code ergeben, und es gibt keine Möglichkeit zu wissen, welche.

2

können Sie versuchen, es durch ein Brute Force Attack zu tun oder mit Hilfe von Rainbow tables

Wie auch immer, (auch wenn Sie bei der Suche nach etwas gelungen) mit diesen Methoden, würden Sie nur eine Zeichenfolge finden die gleiche hascode des mit Original, aber du bist ABSOLUTELY nicht sicher, dass die ursprüngliche Zeichenfolge wäre, weil Hascodes nicht eindeutig sind.

Mmh, vielleicht absolutely ist sogar ein wenig restriktiv, weil Wahrscheinlichkeit sagt, Sie 99,999999999999 ...% wird nicht die gleiche Zeichenfolge finden: D

2

Hashing ist einen kurzen feste Größe Wert von einem in der Regel größeren Eingang zu erzeugen. Es ist im Allgemeinen nicht reversibel.

Mathematisch unmöglich. Es gibt nur 2^32 verschiedene int s, aber fast unendlich viele Strings, so dass aus der pigeon hole principle folgt, dass Sie die Zeichenfolge nicht wiederherstellen können.

Sie können eine Zeichenfolge finden, die ziemlich leicht den HashCode passt, aber es wird wahrscheinlich nicht sein die Zeichenfolge, die ursprünglich gehasht wurde.

GetHashCode() ist für den Einsatz in Hashtables konzipiert und so ist nur ein Leistungstrick. Es ermöglicht eine schnelle Sortierung des Eingabewerts in Buckets und nicht mehr. Sein Wert ist Implementierung definiert. Eine andere .net-Version oder eine andere Instanz derselben Anwendung gibt möglicherweise einen anderen Wert zurück. return 0; ist eine gültige (aber nicht empfohlene) Implementierung von GetHashCode und würde keine Informationen über die ursprüngliche Zeichenfolge liefern.

1

viele von uns möchten in der Lage sein, das zu tun: =)