Entwickler-Ecke
Sonstiges (Delphi) - Wie funtzt der MD5 Encoder?
Janoschka - Mi 21.08.02 13:59
Titel: Wie funtzt der MD5 Encoder?
Wie füntzt der MD5 Decoder von den IndyMisc Kompos?
Irgendwie bringe ich es nicht auf die Reihe mit ihm einen String mit MD5 zu verschlüsseln.
Kann mir irgendjemand eben erklären wie das geht?
Ich habe beispielsweise 2 Lables und möchte, die Caption von Lable 1 per MD5 encoden und dann als Caption von Lable 2 anzeigen.
THX schonmal...
Arakis - Mi 21.08.02 22:18
Decoder? MD5 ist keine Verschlüsselung, sonder bildet aus den Daten eine Quersumme, einen sogenannten Hash. Dies ist eine Einbandstrasse, d.h man bekommt die ursprünglichne Daten nicht mehr zurück.
Hier ein kleines Bespiel:
Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23:
| function TForm1.MD5(Str: String): String; var s: string; i: integer; begin result := ''; IdCoderMD51.Reset; IdCoderMD51.AutoCompleteInput := True; s := IdCoderMD51.CodeString(Str); for i := 1 to Length(s) do begin result := result + LowerCase(IntToHex(BYTE(s[i]), 1)); end; end;
procedure TForm1.Button1Click(Sender: TObject); var hash: String; begin hash := MD5('geheim'); if hash = MD5('geheim') then showmessage('Zugriff gestattet') else showmessage('Zugriff verweigert'); end; |
Bis dann
Janoschka - Do 22.08.02 04:01
jup, decoder war das falsche wort - encoder.
MD5 ist eine Eniwegverschlüsselung, oder habe ich da was falsch verstanden?
O'rallY - Di 27.08.02 14:43
MD5 ist meines Wissen kein Verschlüsselungsalghorithmus. Anhand der Hashes kann man lediglich überprüfen, ob die Datei verändert wurde. Oder?
fbkreon - Sa 21.09.02 13:32
MD5 arbeitet auf dem RSA-Algorithmus, der wenn man so will eine Verschlüsselung darstellt, da man rein theoretisch aus nem MD5-Hash die Originaldaten wiedergewinnen könnte, nur wäre dies so rechenintensiv, daß z.Zt. kein Clustercomputer der Welt genug Rechenkapazität dafür hat. Insofern ist dies eine sehr wirkungsvolle Methoden, wenn man bestimmte Daten selbst kennt, aber nicht möchte, daß ein Fremder hiermit etwas anfangen kann. Wir verwenden es in der Firma, um Benutzerdaten und Passwörter zu übermitteln, denn diese sind gehasht in Datenbanken sehr gut versteckbar.
Übrigens ist in dem Delphi-Quelltext-Beispiel ein kleines Problem:
anstelle
Quelltext
1: 2: 3: 4:
| for i := 1 to Length(s) do begin result := result + LowerCase(IntToHex(BYTE(s[i]), 1)); end; |
muß es für den 'echten' MD5-Hash folgend lauten:
Quelltext
1: 2: 3: 4:
| for i := 3 to Length(s) do begin result := result + LowerCase(IntToHex(BYTE(s[i]), 1)); end; |
andernfalls wird nämlich nicht nur der Hash sondern auch noch die von der Indy-Komponente mitgeschickten checkdaten und das semikolon "mitgehext".
Das dem so ist, kann man einfach per PHP überprüfen:
fbkreon - Sa 21.09.02 16:35
Ich persönlich würde Dir aber dazu raten, mal auf torry.net zu gehen und mal mit dem begriff md5 zu suchen...da gibt es einige sehr feine und vor allem "richtige" Komponenten mit korrektem Ergebnis.
Dan - Do 21.11.02 14:22
Titel: Wo finde ich die Komponente TIdCoderMD5 ????
Ich hab mich jetzt echt danach doof gesucht... !
:oops:
In welchem Package finde ich die Komponente TIdCoderMD5 ?????
Danke!
ao - Do 21.11.02 14:59
Hallo Janoschka,
als alternative zu der Indy MD5 Komponente kann ich dir nur die MD5 Implementation von Fichtner empfehlen, ist nämlich nur eine Unit die du einbinden musst!
http://www.fichtner.net/delphi/md5.delphi.phtml
Gruß
Andreas
Dan - Do 21.11.02 15:02
Titel: In dem Indy...
...Package ist bei mir keine MD5 Komponente enthalten?! Jetzt hab ich die Version aber erst vor 2 Wochen von den Machern gezogen und installiert?!? Oh je... :cry:
wulfskin - Do 21.11.02 15:12
Titel: Re: Wo finde ich die Komponente TIdCoderMD5 ????
Dan hat folgendes geschrieben: |
Ich hab mich jetzt echt danach doof gesucht... !
:oops:
In welchem Package finde ich die Komponente TIdCoderMD5 ?????
Danke! |
In der Indy-Komponenten-Sammlung! Sollten hier in der Link-Sammlung auch zu finden sein!
Gruß wulfskin!
a - Do 21.11.02 15:54
fbkreon hat folgendes geschrieben: |
...der wenn man so will eine Verschlüsselung darstellt, da man rein theoretisch aus nem MD5-Hash die Originaldaten wiedergewinnen könnte... |
fbkreon - Do 21.11.02 17:02
Ein Hash ist eine Zusammenstellung aus Systemzeit,
Motzi - Fr 22.11.02 11:52
Um das hier mal klarzustellen... MD steht für Message Digest. MD5 ist die 5te Version einer von Ron Rivest entworfenen Einweg-Hashfunktion die einen 128Bit großen Hash-Wert erzeugt. Eine Einweg-Hashfunktion hat den Zweck einen Fingerabdruck einer Eingabe anzulegen, d.h. einen Wert zu erzeugen, der etwas darüber aussagt, ob eine bestimmte Eingabe aller Wahrscheinlichkeit nach mit dem tatsächlichen Original übereinstimmt. Da Hashfunktionen normalerweise mehrere Werte auf einen abbilden, können wir mit ihnen zwar nicht hundertprozentig, aber mit ausreichender Sicherheit entscheiden, ob zwei Strings identisch sind.
MD5 basiert weder auf der Systemzeit (wär auch eher schwachsinnig, da sich die Systemzeit ja ändert, dass heißt es würde also immer ein andrer Wert von derselben Eingabe erzeugt werden) noch auf RSA (RSA ist ein public-key Algorithmus bei dessen Entwicklung Ron Rivest mitgearbeitet hat, aber das hat nix mit MD5 zu tun)!
Und falls du eine gute Komponente mit einer MD5-Implementation suchst kann ich dir nur das DEC von Hagen Reddmann empfehlen!
Udontknow - Fr 22.11.02 13:42
Achja, MD5... :)
Zitat: |
der wenn man so will eine Verschlüsselung darstellt, da man rein theoretisch aus nem MD5-Hash die Originaldaten wiedergewinnen könnte |
Also: Ein Hash ist doch eine Prüfsumme mit konstanter Länge, die aus einer Datenmenge mit
variabler Länge generiert wird.
Das impliziert, das unendlich viele (aber nicht alle!) möglichen Datenmengen denselben Hash erzeugen.
Wenn du also nur einen Hash hast, kannst du rein gar nichts damit anfangen, da eine vollständige Dekodierung per Brute Force dir eben unendlich viele Resultate liefern müsste. Es ist also selbst theoretisch nicht möglich.
Erst wenn du die Grösse der zugrundeliegenden Datenmenge zur Verfügung hast, kannst du theoretisch zurückrechnen und bekommst dann eine endliche Menge an Datenmengen, die den Hash erzeugen.
Cu,
Udontknow
fbkreon - Fr 22.11.02 18:06
Grins, das mußt du mir nicht erzählen, ich habe das studiert.....
Deswegen schrieb ich ja such was von theoretisch. Aber selbst wenn du eine annähernde Ahnung hättest, nach was du suchst, dann reicht z.Zt. keine weltliche Rechnerkapazität dazu aus, es in einer realistischen Zeit herauszufiltern. Im übirgen bekommst du über den MD5 für jeden Code nur genau EINEN Hash zurück. Der ergibt sich nämlich aus z.B. der aktuellen Systemzeit usw. Er bleibt aber immer der gleiche.
Motzi - Fr 22.11.02 19:06
Zitat: |
Aber selbst wenn du eine annähernde Ahnung hättest, nach was du suchst, dann reicht z.Zt. keine weltliche Rechnerkapazität dazu aus, es in einer realistischen Zeit herauszufiltern. Im übirgen bekommst du über den MD5 für jeden Code nur genau EINEN Hash zurück. |
Soweit stimm ich dir noch zu...
Zitat: |
Der ergibt sich nämlich aus z.B. der aktuellen Systemzeit usw. Er bleibt aber immer der gleiche. |
Hierbei jedoch nicht mehr! Einmal eine rein logische Frage.. wie willst du auf 2 unterschiedlichen Systemen mit 2 unterschiedlichen Systemzeiten ein und denselben Hash-Wert von ein und derselben Eingabe bilden, wenn der Algorithmus auf der Systemzeit basiert? Ein Hash-Algorithmus basiert auf einem fixen Algorithmus mit fixen Daten, schließlich handelt es sich dabei nicht um eine auf einem Passwort basierende Verschlüsselung! Falls du mir das nicht glaubst kann ich morgen oder übermorgen (je nachdem wann ich Zeit hab) den kompletten Ablauf des MD5 Algos hier posten.
Udontknow - Fr 22.11.02 21:41
Korrekt @ Motzi.
@fbkreon:
Jaja, du hast theoretisch geschrieben, und genau darauf bezog ich mich ja auch! Es ist theoretisch genausowenig möglich, solange man nicht wenigstens die Grösse oder irgend etwas anderes über die zu findende Datenmenge weiss, ansonsten bekämst du beim "Durchsuchen sämtlicher Möglichkeitsräume" nämlich eine unendlich grosse Anzahl von Datenmengen, die alle diesem Hash entsprechen. Und da die Wahrscheinlichkeit, die richtige Datenmenge aus einer unendlich grossen Anzahl herauszupicken gleich null ist, ist es auch theoretisch nicht möglich.
Cu,
Udontknow
PS: Wie bist du auf diesen Namen gekommen?
Motzi - Fr 22.11.02 21:46
Korrekt @ Udontknow! :wink:
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!