Delphi-PRAXiS
Seite 1 von 3  1 23      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi MD5 Hash "zurückrechnen" (https://www.delphipraxis.net/101036-md5-hash-zurueckrechnen.html)

everdream 7. Okt 2007 13:54


MD5 Hash "zurückrechnen"
 
Hallo Liebe Delphi Gemeinde,

Ich habe mir für heute vorgenommen ein kleines Programm zu schreiben, das einen MD5 Hash "zurückrechnet". Ich hab' via Suchfunktion schon einige Threads gefunden, in denen Fragen zu diesem Thema gestellt wurden, allerdings habe ich noch nicht alles zusammen, was ich brauche.

Das Programm soll (rekursiv) jede mögliche Zeichenkombination in einen Hash umrechnen und ihn dann mit dem vorgegebenen vergleichen. Bei Übereinstimmung erfolgt dann die Ausgabe. Abbruchbedingung ist die Länge der Zeichenfolge.

Allerdings habe ich leider wenig Ahnung von Assambler und Co, weswegen ich keinen wirklich effizienten Umrechnungsalgo schreiben kann.
Kann mir jemand einen besonders schnellen Algo empfehlen (Code-Library?)?

Vielen Dank schonmal im Voraus!

lg, everdream

P.s: Ich werde mich wohl vorerst aus "A"-"Z", "a"-"z" und "0"-"9" beschränken.

Dax 7. Okt 2007 14:04

Re: MD5 Hash "zurückrechnen"
 
Zwei Worte: UN MÖGLICH (hi Phoe ;) )

Was du vorhast, wird sehr sehr langsam und in den seltensten Fällen funktionieren. Allerdings wirst du auch mit Assembler deinen gewünschten Algorithmus nicht besonders beschleunigen können. In der Codelib gibt es zwar eine optimierte Methode, einen MD5-Hash zu berechnen (wenn auch mit Einschränkungen), und auch einen Permutationsalgorithmus haben wir, aber schon unter Annahme eines Zeitverbrauchs von 10 µs pro String-Hash brauchst du für alle Strings der Länge genau 6 schon 6,5 Tage.

mkinzler 7. Okt 2007 14:06

Re: MD5 Hash "zurückrechnen"
 
Das Wesens eines Hashalgorithmuses ist ja gerade, daß er bicht umkehrbar ist.

everdream 7. Okt 2007 14:30

Re: MD5 Hash "zurückrechnen"
 
Okay, soweit hatte ich nicht gerechnet.

Dann würde ich vielleicht mal einen Gedanken weiterverfolgen, den ich zu Anfang hatte:
Ein Programm schreiben, das Hashs berechnet und archiviert (alphabetisch sortiert, jeweils mit dem string dahinter, aus dem es erzeugt wurde).
Das müsste dann erst einige zeit laufen, und ich müsste mal eine meiner Partitionen für die Datenbank frei machen, aber wenn ich genug Zeit und Speicherplatz habe, bereitstelle, dann müsste es mir doch möglich sein auch Hashs mit 6 oder mehr Stellen zu identifizieren.

Zugegebenermaßen sehr umständlich, vor allem, weil meine Kenntnisse zum Speichern von Daten grade bis zur textdatei reichen -.-

mkinzler 7. Okt 2007 14:33

Re: MD5 Hash "zurückrechnen"
 
Du wist aber schon das Hashfunktionen nicht eineindeutig sind?

everdream 7. Okt 2007 14:39

Re: MD5 Hash "zurückrechnen"
 
Ja, aber wenn bei den wenigen Zeichen wirklich mal ein Hash auf mehrere Zeichenfolgen zutrifft, dann kann man ja aus denen auswählen.

WordsBG 7. Okt 2007 14:42

Re: MD5 Hash "zurückrechnen"
 
Wenn ich mich mal nicht täusche ist so ein md5 String 32-stellig in Hex geschreiben. Damit hätten wir um einen String in einer Datei zu speichern schon mal 32 Byte. Dann speichern wir den String aus dem er kommt und dahinter ein #0 um das Ende zu siganlisieren. Das wären bei sehr kurzen Strings von durchschnittlich 8-Char also insgesammt 41 Byte pro MD5-Wert. Nun gibt es aber 32^36 MD5-Strings (36 = a bis z (26) + 1 bis 0 [über 9] (10)). Damit bräuchten wir (32^36)*41 Byte im Durchschnitt. Das wären 6.283231718 * 10^55 wenn mich mein Schultaschenrechner nicht täuscht. Wenn wir das im GB umrechnen (/ 1024 / 1024 / 1024) sind das immerhin noch 5.85171554 * 10^46, also eine Zahl 47-stellige Zahl. Ich weiß ja nicht wie groß deine Festplatte ist, aber meine würde das nicht schaffen. Eventuell könnte man da auch mit Kompression ran, aber auch bei großzügigen 80% Kompression oder gar mehr wäre es nicht möglich das zu speichern denke ich.

edit: ups, es ist natürlich 36^32, womit die Ergebnisse sich natürlich ändern, aber dennoch überdimensioniert sind.

everdream 7. Okt 2007 14:50

Re: MD5 Hash "zurückrechnen"
 
Man könnte eventuell noch Platz sparen, indem man das Trennzeichen und den String dahinter weg lässt. Dann müsste man zwar die komplette Datei durchsuche, aber man würde erstmal ne Menge Platz sparen. Zudem könnte man sich ja vorerst auf 5-6 Stellen beschränken. Dazu dann noch Kompression, dann wäre es zumindest im rahemn des Möglichen.

Allerdings weiß ich auch nicht wie lange die Speicher/Kompressionsprozesse dauern, das wäre dann wieder ein Problem.
Weniger Speicher -> mehr Zeit, warum muss die Welt so logisch sein?!

Apollonius 7. Okt 2007 14:56

Re: MD5 Hash "zurückrechnen"
 
Vergiss es. Wie eben festgestellt, brauchen die Hashs den meisten Platz, und selbst mit einer Kompression, bei der du 90% einsparst, hast du dann immernoch eine 45-stellige GB-Zahl.

everdream 7. Okt 2007 15:01

Re: MD5 Hash "zurückrechnen"
 
Naja gut, jetzt weiß ich wenigstens, warum man auf so vielen Pages ein Passwort mit 8 oder mehr Stellen wählen muss :wink:

Trotzdem Danke für die fachmännische Beratung :-D


-> Jetzt brauch' ich ne neue Aufgabe!


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:58 Uhr.
Seite 1 von 3  1 23      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz