![]() |
MD5 Hash Verständnis Problem
Liste der Anhänge anzeigen (Anzahl: 2)
Hi,
Ich bräuchte mal Hilfe zum Thema MD5 Verschlüsselung! 1. Warum sind die Ergebnisse unterschiedlich bei dem folgenden Code ? (Siehe projekt.exe) 2. Warum ändert sich der Hashwert bei 3 nicht, wenn ich lNew noch vor der Label1.Caption Zuweisung setze ? 3. Warum ändert sich der Hashwert bei 3, wenn ich lNew vor der Label3.Caption Zuweisung setze ?
Delphi-Quellcode:
Nachträglich eingefügt: Wenn ich von MD5 Verschlüsselung spreche meine ich MD5 Hash!
procedure TForm1.Button1Click(Sender: TObject);
var lNew,lNew2 : String; begin { Function MD5Hash(APWD: String): String; Begin With THash_MD5.Create Do Try Init; Calc(APwd, Length(APwd)); Done; Result := DigestStr(TFormat_HEX); Finally Free; End; End; } lNew := Edit1.Text; {1}Label1 .Caption := ' = ' + MD5_HASH.MD5Hash(Edit1.Text); {2}Label2 .Caption := ' = ' + MD5_HASH.MD5Hash('ms'); // lNew := Edit1.Text; setze ich lNew hier kommt auch immer ein anderer Hashwert raus bei 3 {3}Label3 .Caption := ' = ' + MD5_HASH.MD5Hash(lNew); {4}Label4 .Caption := ' = ' + MD5_HASH.MD5Hash(PChar('ms')); {5}Label9 .Caption := ' = ' + MD5_HASH.MD5Hash(PChar(Edit1.Text)); {6}lNew2 := Edit1.Text; Label13.Caption := ' = ' + MD5_HASH.MD5Hash(lNew2); {7}lNew2 := PChar('ms'); Label11.Caption := ' = ' + MD5_HASH.MD5Hash(lNew2); end; Mit freundlichen Grüßen Tom [edit=Phoenix]Titel auf Anfrage des Autors geändert. Mfg, Phoenix[/edit] |
Re: MD5 Verschlüsselung Verstandnis Problem
MD5 ist keine Verschlüsselung sondern ein Hash-Verfahren
Und dein Programm konnte ich nicht starten, weil es eine FastMM-Dll anmahnt. |
Re: MD5 Verschlüsselung Verstandnis Problem
Zitat:
|
Re: MD5 Verschlüsselung Verstandnis Problem
Das mit der Verschlüsselung ist ein Tippfehler ! Und ich hoffe die EXE funktioniert jetzt Sorry hat ich nicht getestet ! :-D
|
Re: MD5 Hash Verständnis Problem
Zitat:
Delphi-Quellcode:
Der Fehler im obigen source ist
Result := THash_MD5.CalcBinary(APWD, TFOrmat_HEX);
Delphi-Quellcode:
APwd -> Type LongString und damit ein Pointer auf eine interne PLongStringRec Datenstruktur und nicht dem eigentlichen String.
Calc(APwd[1], Length(APwd));
// oder Calc(PChar(APwnd)^, Length(APwnd)); // TypCast LongString nach PChar mit anschließnder Dereferenzierung des zeigers MD5 als Hash funktion kann in sogenannten MDC -> Message Digest Cipher auch als Verschlüsselung benutzt werden, auch wenn ich das persönlich für ein schlechtes Vorgehen erachte. Man kann also mit MD5 auch Daten verschlüsseln, damit ist dieses Verfahren dann auch eine Verschlüsselungsfunktion. Ach und nochwas. Deine Art ein Passwort in einen Sessionkey umzuwandlen bzw. es zu schützen ist unsicher. Es lassen sich auf diese Weise zb. Brute Force Angriffe per Rainbow Tabellen anwenden. Besser ist es so
Delphi-Quellcode:
Wir erzeugen einen Zufallswert, 16 Bytes lang, und hashen diesen per KDF -> Key Derivation Function -> Schlüsselableitungfunktion auf sichere Weise. So entsteht ein 32 Bytes langer Wert der in den ersten 16 Bytes den Salt speichert und in den zweiten 16 bytes den Output der KDF zum Salt + Password.
function HashPassword(const Password: String; const HashClass: TDECHashClass = THash_MD5): String;
var Salt: Binary; begin Salt := RandomBinary(16); Result := TFormat_HEX.Encode(Salt) + ValidHash(HashClass).KDFx(Password, Salt, 16, TFormat_HEX); end; Wollte man nun per Rainbow Tabellen auf ein so umgewandeltes Passwort eine Brute Force Attacke durchführen, also ein Wörterbuch benutzen, so benötigte man bei 16 Bytes langen Keys nicht mehr nur 2^128 Einträge pro Dictionary sondern 2^128 * 2^128. Also für jedes einzelne Password müsste man eine eigene Rainbow Tabelle erzeugen. Gruß Hagen |
Re: MD5 Hash Verständnis Problem
@negaH Danke für die Erklärung!
Mit freundlichen Gruß Tom |
Re: MD5 Hash Verständnis Problem
Na toll. Ich ging bisher immer davon aus, dass Calc() einen String als ersten Parameter hat und nicht einen unspezifischen Daten-Pointer. :wall: Nicht denken, wissen Muetze1!
@Astartes: War der Code nicht von einem Beispiel? Woher kam die Routine? |
Re: MD5 Hash Verständnis Problem
Ja, der Code stammte aus dem Delphipraxisforum.
![]() Sehe grad das ich beim Abschreiben einen Fehler gemacht habe ! :wall: Mit freundlichen Gruß Tom |
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:34 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz