Umkehrung eines MD5-Hash-Algorithmus in C # [Duplikat]

8

Gegeben diese Methode in c #

%Vor%

Wie würde man diesen Prozess mit einer "DecodeFileHash" -Methode umkehren?

%Vor%

wo decodedQuery == fileQuery am Ende.

Ist das überhaupt möglich? Wenn es nicht möglich ist, würde es irgendwie einen Hash erzeugen, den ich leicht entschlüsseln könnte?

Edit: Um es klar zu sagen, ich möchte nur die Variable "fileQuery" komprimieren und fileQuery dekomprimieren, um festzustellen, was es ursprünglich war. Irgendwelche Vorschläge zur Lösung dieses Problems seit dem Hashing / Decoding ist out?

Edit Again: Ein Base64 Encoding / Decoding zu machen, klingt dann wie die optimale Lösung.

%Vor%     
tester 06.05.2011, 22:25
quelle

6 Antworten

14

Unmöglich. Nach Definitions- und Design-Hashes kann nicht auf reinen Text oder ihre ursprüngliche Eingabe zurückgegriffen werden.

Es klingt, als würden Sie versuchen, die Dateien zu komprimieren. Wenn dies der Fall ist, ist hier eine einfache Methode mit GZip:

%Vor%     
Thomas 06.05.2011, 22:26
quelle
6

Ein Hash wird von der ursprünglichen Information abgeleitet, enthält jedoch nicht die ursprüngliche Information. Wenn Sie einen kürzeren Wert wünschen, der die ursprünglichen Informationen verbirgt, aber auf den ursprünglichen Wert aufgelöst werden kann, sind Ihre Optionen ziemlich begrenzt:

  • Komprimiert die ursprünglichen Informationen. Wenn Sie eine Zeichenkette benötigen, müssen Ihre ursprünglichen Informationen ziemlich groß sein, damit die komprimierte Version mit Basis-64-Codierung nicht größer als die ursprünglichen Daten ist.
  • Verschlüsseln Sie die ursprünglichen Informationen - das ist sicherer als das Komprimieren und kann mit der Komprimierung kombiniert werden, aber es wird wahrscheinlich auch größer als die ursprüngliche Information sein.
  • Speichern Sie die ursprünglichen Informationen irgendwo und geben Sie einen Nachschlageschlüssel zurück.
Joel Mueller 06.05.2011 22:33
quelle
4

Wenn Sie die Daten zurück erhalten möchten, möchten Sie Komprimierung , nicht Hashing.

    
Rob Agar 06.05.2011 22:32
quelle
4

Was Sie tun möchten, ist Verschlüsseln und Entschlüsseln ....

Nicht Hash und Unhash, was, wie @Thomas herausstellte, unmöglich ist. Hashes werden in der Regel mit Hilfe von Rainbow-Tabellen oder anderen Datasets, die etwas enthalten, das den gleichen Hash erzeugt ... nicht garantiert der Eingabewert, nur einige -Werte, die die gleiche Ausgabe im Hashalgorithmus erzeugt .

Jeff Atwood hat hier einen guten Code zum Verständnis der Verschlüsselung:
Ссылка

Wenn das für Sie nützlich ist

    
Matthew 06.05.2011 22:30
quelle
3

Ein kryptografischer Hash ist per definitionem nicht mit typischen Mengen an Rechenleistung umkehrbar. Es ist normalerweise nicht einmal möglich, eine Eingabe zu finden, die den gleichen Hash wie die ursprüngliche Eingabe hat.

Das Zurückgeben der ursprünglichen Eingabe ist mathematisch unmöglich, wenn mehr als 2 ^ n verschiedene Eingaben vorhanden sind. Wobei n die Bitlänge des Hashes ist (128 für md5). Schaut nach dem Taubentechnischen Prinzip.

Ein Hash ist keine verlustfreie Komprimierungsfunktion.

    
CodesInChaos 06.05.2011 22:32
quelle
3

Ein kryptografischer Hash, wie MD5, ist als eine Einwegfunktion ausgelegt, dh es ist rechnerisch nicht machbar, die Quelldaten abzuleiten, aus denen ein bestimmter Hash berechnet wurde. MD5 wurde jedoch aufgrund der aufgedeckten Schwächen für einige Zeit als nicht sicher betrachtet:

Wikipedia auf MD5-Sicherheit MD5 als schädlich angesehen

Eine weitere Schwachstelle in MD5 ist, dass aufgrund seiner relativ geringen Größe große Regenbogen-Tabellen veröffentlicht wurden, die einen Einblick geben up einen gegebenen MD5-Hash, um eine Quelleingabe zu erhalten, die mit dem angegebenen Hash-Wert kollidiert.

    
Nicholas Carey 06.05.2011 22:37
quelle

Tags und Links