Hier die Auflösung, vor allem, falls später noch mal jemand drüber stolpert. Das Verhalten der alten fhash-
Unit kann man nachstellen, indem man an die neue Funktion aus der system.hash nicht direkt den String übergibt, sondern ihn sozusagen als Byte-Folge mitgibt. Hier ein Beispielprogramm, in welchem der Aufruf der "alten" FHash-Funktion und der bei Delphi jetzt mitgelieferten das selbe Ergebnis liefern:
Delphi-Quellcode:
uses
System.SysUtils,
FHash_single,
System.Hash;
var md5: ThxMD5;
md5system: THashMD5;
md5_Fhash:
string;
md5_system:
string;
inStr:
String;
begin
try
{ TODO -oUser -cConsole Main : Code hier einfügen }
inStr:=ParamStr(1);
md5.Init;
md5.Update(inStr);
md5.
Final;
md5_Fhash:=md5.asHexString;
md5system.Reset;
md5system.Update(inStr[1],Length(inStr)*2);
md5_system:=md5system.HashAsString;
writeln('
md5 Fhash_single: '+md5_Fhash);
writeln('
md5 System : '+md5_system);
writeln;
except
on E:
Exception do
Writeln(E.ClassName, '
: ', E.
Message);
end;
end.
Während die Funktion aus Fhash (hier: fhash_single) immer mit zwei Bytes pro Buchstabe arbeitet, so scheint es mir bei dem richtigen Hash so zu sein, dass zumindest die abschließenden 0-Bytes abgeschnitten werden. Wenn man nun also die neue Funktion zwingt, auch immer zwei Bytes zu nehmen, dann funktioniert es.
Danke für eure Anregungen!
Bis denn
Bommel