Discussion:
Problem mit MD5-Verschlüsselung
(zu alt für eine Antwort)
Franz Moll
2015-01-20 11:50:37 UTC
Permalink
Hallo NG,

ich habe hier Delphi XE4 mit Indy und bekomme beim Kompilieren in
folgender Funktion einen Fehler:


function GetMD5(Buffer: Pointer; BufSize: Integer): string;
var
I : Integer;
MD5Digest : TMD5Digest;
MD5Context : TMD5Context;
begin
for I := 0 to 15 do
Byte(MD5Digest[I]) := I + 1; // <--Compiler-Fehler
MD5Init(MD5Context);
MD5UpdateBuffer(MD5Context, Buffer, BufSize);
MD5Final(MD5Digest, MD5Context);
Result := '';
for I := 0 to 15 do
Result := Result + IntToHex(Byte(MD5Digest[I]), 2);
end;


Der Fehler lautet: E2064 Der linken Seite kann nichts zugewiesen werden.
Die Funktion ist aus der Indy-Unit "IcsMD5".
Kann jemand helfen?
Vielen Dank schon mal.
Bye
Franz
Franz Moll
2015-01-20 12:21:36 UTC
Permalink
Ist erledigt. Statt Indy die unit IdHashMessageDigest verwendet und dann
wie folgt:

function Hash(const S: String): String;
var
LMD5: TIdHashMessageDigest5;
begin
LMD5 := TIdHashMessageDigest5.Create;
try
Result := UpperCase(LMD5.HashStringAsHex(S));
finally
LMD5.Free;
end;
end;

So einfach ist das, wenn man weiß wie es geht ;-)
Holger Schieferdecker
2015-01-20 12:20:28 UTC
Permalink
Post by Franz Moll
Hallo NG,
ich habe hier Delphi XE4 mit Indy und bekomme beim Kompilieren in
Ohne daß ich jetzt Ahnung von Indy oder MD5 hätte (wie ist denn
Post by Franz Moll
function GetMD5(Buffer: Pointer; BufSize: Integer): string;
var
I : Integer;
MD5Digest : TMD5Digest;
MD5Context : TMD5Context;
begin
for I := 0 to 15 do
Byte(MD5Digest[I]) := I + 1; // <--Compiler-Fehler
Sollte der Cast vielleicht auf die rechte Seite?
MD5Digest[I] := byte(I+1);
Post by Franz Moll
MD5Init(MD5Context);
MD5UpdateBuffer(MD5Context, Buffer, BufSize);
MD5Final(MD5Digest, MD5Context);
Result := '';
for I := 0 to 15 do
Result := Result + IntToHex(Byte(MD5Digest[I]), 2);
end;
Der Fehler lautet: E2064 Der linken Seite kann nichts zugewiesen werden.
Die Funktion ist aus der Indy-Unit "IcsMD5".
Kann jemand helfen?
Vielen Dank schon mal.
Bye
Franz
HTH
Holger
Franz Moll
2015-01-20 12:42:34 UTC
Permalink
Post by Holger Schieferdecker
...
Post by Franz Moll
function GetMD5(Buffer: Pointer; BufSize: Integer): string;
var
I : Integer;
MD5Digest : TMD5Digest;
MD5Context : TMD5Context;
begin
for I := 0 to 15 do
Byte(MD5Digest[I]) := I + 1; // <--Compiler-Fehler
Sollte der Cast vielleicht auf die rechte Seite?
MD5Digest[I] := byte(I+1);
Ja, klingt logisch. TMD5Digest ist als

TMD5Digest = array [0..15] of Char;

deklariert. Ich weiß grad nicht, wie der Byte-Cast dahin gekommen ist.
Normalerweise fasse ich "fremde" Units nicht an.
Aber nun habe ich es ja anders gelöst.
Vielen Dank trotzdem für Deine Antwort.

Loading...