MD5 Summen

  • Ersteller Ersteller velderboard
  • Erstellt am Erstellt am
V

velderboard

Gast
Hallo

Ich möchte ein programm machen, dass eine datei mit einer bestimmten MD5 summe sucht.
Das ganze soll in VB geschrieben sein. Wie kann ich das machen?

Danke
Grüsse
 
Ganz einfach - du generierst jede mögliche Datei, berechnest die MD5-Summe, und vergleichst sie mit der der du haben möchtest.

Der Ansatz hat zwei Probleme:
Zu einer MD5-Summe kann es theoretisch beliebig viele Dateien geben.
MD5-Summen sind Einweg-Hashes - d.h. du kannst eine MD5-Summe nicht "zurückrechnen" (siehe auch Punkt darüber).


Ich hoffe du erkennst die Sinnlosigkeit von "jede mögliche Datei", denn das dauert auch beliebig lange.
 
Einige grundlegende Überlegungen zu deinem Problem:
- MD5 ist eine bis dato nicht geknackte Hashfunktion mit einer Hashgröße von 128 bit.
- Nehmen wir an, MD5 wäre eine ideale Hashfunktion, d.h. für beliebigen Input kommt jeder Output mit gleicher Häufigkeit vor (dies ist inkorrekt, aber hier kein prinzipieller Fehler).
- 128 bits entsprechen 2^128 = 3*10^38 (!!) Möglichkeiten. Wenn du also versuchst, für einen Hash x einen Input y zu erraten, ist der mit einer Wahrscheinlichkeit von 1/(3*10^38) korrekt.
- Ein moderner Prozessor schafft in einem nicht überdurchschnittlich gut optimierten Programm auf einem Prozessorkern eine Million MD5-Hashes pro Sekunde.

Das bedeutet folgendes für dein Problem, dessen effiziente Lösung weitreichende Folgen für den Computersicherheitsbereich hätte:
- Wenn du nichts über deinen Input weißt und die Datei eine hinreichende Länge hat, kannst du das Bruteforcen vergessen.
- Selbst wenn du eine sehr kleine Datei (~1kb) mit einem sehr großen Netzwerk an PCs bruteforcen wolltest, bräuchtest du mit allerhöchster Wahrscheinlichkeit länger, als deine Enkelkinder warten wollen ;)
- Falls du aber nur einen sehr kurzen String anstelle einer richtigen Datei bruteforcen willst,hast du Chancen... ich empfehle dir dennoch, die Knack-Komponente nicht in VB sondern in Maschinencode zu schreiben, da du damit eine Menge Zeit und Strom sparst.

LG Alexander
 
Lies dir mal den Wiki-Artikel durch. Jeder versucht dir hier gerade zu sagen, dass das absolut keinen Sinn macht, denn das Programm wird wohl länger brauchen als du alt wirst - für eine Lösung. Und eine mögliche Kollision für einen gegebenen Hash muss noch lange nicht die "Datei" sein, die du haben willst.

Erklär doch mal bitte lieber, was du eigentlich vor hast bzw. damit erreichen willst.

Edit:
Falls du Passwörter "knacken" willst, nimm ein fertiges Programm, das mit Rainbow-Tables arbeitet. Da solche Software seit dem "Hacker-Paragraphen" illegal ist, lasse ich namentliche Nennungen. Das wird auch nur mit schlechten Implementierungen funktionieren, die das Passwort direkt in eine MD5-Summe umrechnet (und auch nur mit schlechten Passwörtern, die anfällig gegen Wörterbuchangriffe sind). Jede etwas bessere Lösung fügt einen zufälligen Teil zum Passwort hinzu, den sogenannten Salt. Damit haben Rainbow-Tables keine Chance.


Edit2:
Aaah, nun ist mir klar was du meinst :)
 
Zuletzt bearbeitet:
Ne ich will keine Passwörter knacken.
Will nur bestimmte Dateien anhand md5 suchen...
 
Wenn ich dich richtig verstehe, willst du (z.B. bei dir auf dem PC) ein Verzeichnis auswählen und dieses durchsuchen, ob da eine Datei mit einer bestimmten MD5-Summe drin ist.

Richtig?
 
Das sollte doch kein Problem sein.. Du machst einen Index (entweder eine Textdatei oder Datenbank) in dem Die Dateien mit den MD5-Hashes drinstehen. Und dann suchst du halt.
Sonst müsstest du jedes Mal von allen Dateien den Hashwert berechnen, was zu aufwändig wäre.

Und wie man den Wert berechnet kannst du ruhig mal selbst herausfinden. Google hilft manchmal.

/edit
kleiner Tipp: wenn du VB.Net benutzt, was ich hoffe, gibt es die Klasse System.Security.Cryptography.MD5, die solltest du dir mal geneauer ansehen.
 
Zuletzt bearbeitet:
Zurück
Oben