Zitat:
Delphi-Quellcode:
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;
Entweder bseitigst du den Fehler aus obigem Source oder benutzt gleich
Result := THash_MD5.CalcBinary(APWD, TFOrmat_HEX);
Der Fehler im obigen source ist
Delphi-Quellcode:
Calc(APwd[1], Length(APwd));
// oder
Calc(PChar(APwnd)^, Length(APwnd)); // TypCast LongString nach PChar mit anschließnder Dereferenzierung des zeigers
APwd -> Type LongString und damit ein Pointer auf eine interne PLongStringRec Datenstruktur und nicht dem eigentlichen String.
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:
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;
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.
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