Per hand geht das dann so
Delphi-Quellcode:
with THash_MD5.Create do
try
Init;
Calc(DeinString[1], Length(DeinString));
Calc(NochEinString[1], Length(NochEinString));
Calc(IrgendEinInteger, SizeOf(IrgendEinInteger));
Done;
ResultAsHEXString := DigestStr(TFOrmat_HEX);
finally
Free;
end;
Mit der von Hand Methode kannst du verschiedene Datenbereich nacheinander so hashen als wären die in einem Datenbereich linear sequentiell angeordnet.
Um ein Passwort auf sicherer Weise in einen Sessionkey umzuwandeln supporten die Hash Klassen eigene Methoden. Sowas macht man über KDF's = Key Derivation Functions und dafür gibt es sogar Standardverfahren.
Delphi-Quellcode:
var
Salt: Binary;
begin
Salt := RandomBinary(16);
SessionKey := THash_MD5.KDFx(Password, Salt, 16, TFormat_Binary);
end;
Das wandelt das Password in einen 16 Byte langen binären Wert um der mit dem Zufalls-Salt und mehreren Runden an Hash-Berechnungen verknüpft wurde.
Die Methoden .KDF1(), .KDFx() gibts in 2 Versionen, und sie benötigen einen Zufalls-Salt.
Möchtest du ohne diesen Salt arbeiten, den du ja mit übertragen musst, dann sind es MGFs = Mask Generation Functions. Diese Methoden heisen dann .MGF1 und .MGFx().
Die x'er Versionen sind prohibitär von mir entwickelt und im Grunde besser als die Standard-Versionen .KDF2() und .MGF1(). Diese basieren auf dem IEEE Standard für Kryptographie. Schau dir in
Unit DECHash.pas einfach deren Implentierungen an.
Gruß Hagen