String ist aber auch nicht sinnvoll.
Wenn man 'nen Hash auf 'ne Exe machen will, geht man sie bytewesie durch.
TFileStream oder TMemoryStream dürften hier eher die Mittel der Wahl sein.
Unter Delphi 7 nutze ich diese
Unit:
https://sourceforge.net/p/lazarus-cc...hes/dcpmd5.pas
Das geht dann ungefähr so:
Delphi-Quellcode:
function TfmMain.GetMD5(st : TMemoryStream) : String;
var
Digest : array[0..15] of byte;
i : Integer;
iPos : Integer;
md5 : TDCP_md5;
begin
md5 := TDCP_md5.Create(Self);
iPos := st.Position;
st.Position := 0;
md5.Init;
md5.UpdateStream(st,st.Size);
md5.Final(Digest);
Result := '';
for i := 0 to 15 do Result := Result + IntToHex(Digest[i],2);
st.Position := iPos;
md5.Free;
end;
MD5 an 'ne Datei anhängen:
Delphi-Quellcode:
var
Digest : array[0..15] of byte;
i : Integer;
iPos : Integer;
md5 : TDCP_md5;
begin
md5 := TDCP_md5.Create(Self);
sf := tFileStream.Create(ParamStr(0),fmOpenReadWrite);
md5.Init;
md5.UpdateStream(sf,sf.Size);
md5.Final(Digest);
sf.Position := sf.Size;
for i := 0 to 15 do sf.Write(Digest[i],1);
sf.Free;
md5.Free;
end;
In neueren Delphis gibt es dashier:
http://docwiki.embarcadero.com/Libra...hBytesFromFile
Ich rate jetzt mal, es könnte so ein Einzeiler sein:
ShowMessage(TEncoding.ANSI.GetString(System.Hash.THashMD5.GetHashBytesFromFile(ParamStr(0)));
Das Ergebnis davon an 'ne Datei zu hängen, dürften dann kein Problem mehr sein.